解题思路:
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分
16 人评分
不需要数组和指针的做法!!!浏览:1121 |
C语言考试练习题_保留字母 (C语言代码)浏览:577 |
【求帮助】C语言程序设计教程(第三版)课后习题8.9 (C语言代码)浏览:783 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:584 |
C语言程序设计教程(第三版)课后习题6.9 (C++代码)论pow函数的应用浏览:1018 |
C语言程序设计教程(第三版)课后习题8.9 (C++代码)浏览:843 |
点我有惊喜!你懂得!浏览:1397 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:552 |
printf基础练习2 (C语言代码)浏览:566 |
妹子杀手的故事 (C语言代码)浏览:1204 |