題目:輸入正整數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?。。