每日一练第5天:分数化小数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一练第5天:分数化小数相关的知识,希望对你有一定的参考价值。
输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b≤10 6 ,c≤100。输入包含多组数据, 结束标记为a=b=c=0。
样例输入:
1 6 4
0 0 0
样例输出:
Case 1: 0.1667
这道题靠计算机本身来做除法是会出现精度问题的,所以要模拟数学上的除法:
1 #include <stdio.h> 2 3 int main() 4 { 5 int a, b, c, ct = 1; 6 while(3 == scanf("%d%d%d", &a, &b, &c)) 7 { 8 if(0 == a && 0 == b && 0 == c) break; 9 int integer = a / b; // 获得整数部分 10 printf("Case %d: %d.", ct++, integer); 11 a %= b; // 获得余数 12 int i = 1; 13 while(i++ < c) // 进行c-1次模数学拟除法求出小数点后c-1位,因为要四舍五入,所以最后一位单独处理 14 { 15 a *= 10; 16 printf("%d", a / b); 17 a %= b; 18 } 19 a *= 10; 20 printf("%d\n", ((a % b) * 10 / b > 5) ? (a / b + 1) : (a / b)); // 判断最后一位的下一位是否大于5,进行四舍五入 21 } 22 return 0; 23 }
以上是关于每日一练第5天:分数化小数的主要内容,如果未能解决你的问题,请参考以下文章