解题思路:
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 人评分
C语言程序设计教程(第三版)课后习题8.7 (C++代码)浏览:855 |
C语言程序设计教程(第三版)课后习题6.9 (C++代码)浏览:560 |
【明明的随机数】 (C语言代码)浏览:707 |
C语言训练-列出最简真分数序列* (C语言代码)浏览:543 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:724 |
字符串对比 (C语言代码)浏览:1471 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:584 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:591 |
C语言训练-大、小写问题 (C语言代码)浏览:649 |
模拟计算器 (C++代码)浏览:885 |