码迷,mamicode.com
首页 > 其他好文 > 详细

每日一练第5天:分数化小数

时间:2017-01-25 12:31:21      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:ret   break   输出   std   小数   scanf   span   include   小数点   

输入正整数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天:分数化小数

标签:ret   break   输出   std   小数   scanf   span   include   小数点   

原文地址:http://www.cnblogs.com/xxgm/p/6349262.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!