题目:输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位
解法:一般会想到如下的解法,但实际上精确度是不够的:
#include <stdio.h>
int main(){
int a,b,c;
while(scanf("%d%d%d",&a,&b,&c)==3)
printf("%.*f\n",c,a*1.0/b);
return 0;
}
例如,输入 1 3 20的结果是:
正确做法应该是模拟数学里面的除法公式,代码如下:
#include <stdio.h>
int main(){
int a,b,c,i;
int digit,fac;
while(scanf("%d%d%d",&a,&b,&c)==3){
digit=a/b;
printf("%d.",digit);
fac=a%b;
for (i=0;i<c;i++){
fac*=10;
digit=fac/b;
printf("%d",digit);
fac=fac%b;
}
printf("\n");
}
return 0;
}
当然这种解法也还有缺陷,未考虑末位的四舍五入问题。
不过题目似乎对于这种无限循环小数0.9999999....没做约定?如果四舍五入,那值是等于1?。。