习题2-5分数化小数

时间:2022-10-23 00:12:01

目的:将分数化成指定精度的小数

 

要求:

  输入:输入正整数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);
    }
}

反思:就像大整数运算一样,有些运算需要我们了解其运算的机理,无法直接得到答案,而是要自己模拟运算求解。