解题思路:
1.输入分子x,分母y,求出x/y存入num;
2.根据小数部分进制转换思路:
(1):设转换进制为jinzhi=3进制;
(2):假设小数为1/4=0.25
①:0.25 * 3= 0.75 整数部分为0,小数部分为0.75
②:0.75 * 3= 2.25 整数部分为2,小数部分为0.25
③:0.25 * 3= 0.75 整数部分为0,小数部分为0.75
④:0.75 * 3= 2.25 整数部分为2,小数部分为0.25
.............
(3):把整数部分写下来为0202......这就是0.25转换为三进制后,对应小数点后面的数;
(4):我们假设精度为小数点后面三位,则0.25---->0.021,比方10进制数,大于等于5的进位,这里3进制数,就是大于等于1.5的进位,很显然0.0202保留三位小数就是 0.021;
(5):题目要求保留小数点后面10位,所上面求整数部分过程要求11次;
(6):最后进位(满3进1),注意:如三进制小数0.22222,要求保留4为小数的话,不是简单的向前面一位进1就结束,(因为进1后为0.2223,三进制是不能有3的,故满三还得进1);
参考代码:
#include <stdio.h> void output_three( double num ); int jinzhi = 3;//可换为其它进制 /*-----------------------------------------*/ int main() { int x, y; double num; while ( scanf( "%d/%d", &x, &y ) != EOF ) { num = 1.0 * x / y;//乘1.0转化为浮点型 output_three( num ); } return(0); } /*-----------------------------------------*/ void output_three( double num ) { int A[11]; for ( int i = 0; i < 11; i++ ) { num *= jinzhi; A[i] = (int) num; num -= A[i]; } if ( A[10] >= 1.0 * jinzhi / 2 )//三进制的‘四舍五入’ A[9] += 1; for ( int j = 9; j > 0; j-- )//进位,小数点后第一位为3时,不进到个位 { if ( A[j] == 3 ) { A[j - 1] += 1; A[j] = 0; } } printf( "." ); //输出结果 for ( int k = 0; k < 10; k++ ) printf( "%d", A[k] ); printf( "\n" ); return; }
别忘点赞哦-.-!
0.0分
10 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复