输入正整数a,b,c,输入a/b的小数形式,输入包含多组数据,结束标记为a=b=c=0精确到小数点后c位。a,b≤106,c≤100。
解析:这题除了需要注意数据规模外难点在于保留的小数位数要手动输入,我们需要自己写程序模拟保留小数位数的过程(注意四舍五入),要直接通过计算机的浮点运算来实现不太可能(至少我试过了不行,有大神能实现的话请在评论区贴出代码,感激不尽),因为这涉及到多次类型转换,而每次从高到低的类型转换都会直接截断导致数据丢失,所以只能按位输出,在需要输出的最后一位需要根据下一位的数值来判断是否进位。
#include<stdio.h> int main (void) { long long a,b; int c; while (scanf ("%lld%lld%d",&a,&b,&c) == 3 && !(a == 0 && b == 0 && c == 0)) { printf ("%lld.",a/b);//先输出整数部分和小数点 a %= b; for (int i = 1; i < c; i++) { printf ("%lld",a*10/b); a = a*10%b; } if (a*10%b*10/b < 5)//对需要输出的最后一位进行是否进位的判断 printf ("%lld",a*10/b); else printf ("%lld",a*10/b+1); } return 0; }