目的:将分数化成指定精度的小数
要求:
输入:输入正整数a, b, c(a,b不大于106, c不大于100),以a = b = 0结束
输出:输出a / b的小数形式,精确到小数点后c位
样例输入:1 6 4
0 0 0
样例输出:0.1667
思路:不能用直接printf("%.*lf\n", c, result);输出,因为格式输出受到结果result是double变量的影响,有效数位只有16位,所以只能模拟小学的计算小数的过程。
代码如下:
#include<stdio.h> int main() { int a, b, c; scanf("%d%d%d", &a, &b, &c); while(a || b || c){ //Processing int num = 0; int left = a; for(int i = 0; i <= c; i++){ if(i == 1){ putchar('.'); } num = left / b; printf("%d", num); left -= num * b; left *= 10; } putchar('\n'); //Input scanf("%d%d%d", &a, &b, &c); } }
直接格式输出的错误代码:
#include<stdio.h> int main() { int a, b, c; scanf("%d%d%d", &a, &b, &c); while(a || b || c){ if(!b){ return 1; } double result = (double)a / b; printf("%.*lf\n", c, result); scanf("%d%d%d", &a, &b, &c); } }
反思:就像大整数运算一样,有些运算需要我们了解其运算的机理,无法直接得到答案,而是要自己模拟运算求解。