输入正整数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;
}