这道题的难点在于精确到小数点后c位,c是个变量,因而习以为常的%.nf就不适用了,所以要换一种思维去思考这个问题。
首先,a/b可以得到正常除法a/b的小数点前的整数,因而设计如下代码:
printf("Case %d:%d.",count,a/b);
然后,考虑如何将小数逐一输出,直到要精确的位数,设计的代码如下:
d=(double)a/b-a/b; / /得到小数部分
for(i=1; i<=c; i++)
{
d*=10; / /小数点进一位
x=(int)d; / /对d进行强制转化,得到a/b对应的小数位数字
if(i == c)
if(x >= 5)
x++; / /考虑四舍五入
printf("%d",x); / /输出a/b对应的小数位数字
d-=x;
}
我主要使用了强制转化的方法。
完整代码如下:
#include <stdio.h>
int main()
{
int a,b,c,count;
double d;
int i,x;
while(scanf("%d%d%d",&a,&b,&c) != EOF)
{
if(a==b && b==c)
if(c==0) break;
count++;
printf("Case %d:%d.",count,a/b);
d=(double)a/b-a/b;
for(i=1; i<=c; i++)
{
d*=10;
x=(int)d;
if(i == c)
if(x >= 5)
x++;
printf("%d",x);
d-=x;
}
printf("\n");
}
return 0;
}
测试如下: