题目
本题给我们直观的感受了————计算机底层对小数处理的精度的极限。
一、精度有问题的解法(未AC)
#include<bits/stdc++.h> using namespace std; int main() { int a,b,n; while(~scanf("%d%d%d",&a,&b,&n)) { char test[15]="%."; char rear[4]="f\n"; char c[5]; sprintf(c,"%d",n); strcat(test+1,c); int len=strlen(test); strcat(test+len,rear); //printf函数的使用 ,下面这样输入2 3 3会显示0.667 printf(test,(double)a/(double)b); } return 0; }
表现:
输入2 3 3会显示0.667,而不是题目中的0.666 用例: 1 3 788 对应输出应该为: 0.33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333 你的输出为: 0.33333333333333331482961625624739099293947219848632812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
二、改进后的AC代码
#include<bits/stdc++.h> using namespace std; int main() { int a,b,n; while(~scanf("%d%d%d",&a,&b,&n)) { printf("%d.",a/b);//整数 a%=b; //精度到1000了,由于计算机底层实现,C语言无法弄那么高精度,只能用这种方式来模拟 while(n--) { a*=10; printf("%d",a/b); a%=b; } printf("\n"); } return 0; }