C 语言 分数化小数

输入正整数 a,b,c, 输出 a/b 的小数形式, 精确到小数点后 c 位。a,b≤10 6 ,c≤100。输入包含多组数据, 结束标记为 a=b=c=0。

样例输入:

1 6 4

0 0 0

样例输出:

Case 1: 0.1667


这道题靠计算机本身来做除法是会出现精度问题的,所以要模拟数学上的除法:

#include <stdio.h>

int main()
{
    int a, b, c, ct = 1;
    while(3 == scanf("%d%d%d", &a, &b, &c))
    {
        if(0 == a && 0 == b && 0 == c) break;
        int integer = a / b;                        // 获得整数部分
        printf("Case %d: %d.", ct++, integer);
        a %= b;         // 获得余数
        int i = 1;
        // 进行c-1次模数学拟除法求出小数点后c-1位,因为要四舍五入,所以最后一位单独处理
        while(i++ < c)
        {
            a *= 10;
            printf("%d", a / b);
            a %= b;
        }
        a *= 10;
        // 判断最后一位的下一位是否大于5,进行四舍五入
        printf("%d\n", ((a % b) * 10 / b > 5) ? (a / b + 1) : (a / b));
    }
    return 0;
}

输入正整数 a,b,c, 输出 a/b 的小数形式, 精确到小数点后 c 位。a,b≤10 6 ,c≤100。输入包含多组数据, 结束标记为 a=b=c=0。

样例输入:

1 6 4

0 0 0

扫描二维码关注公众号,回复: 4191596 查看本文章

样例输出:

Case 1: 0.1667


这道题靠计算机本身来做除法是会出现精度问题的,所以要模拟数学上的除法:

#include <stdio.h>

int main()
{
    int a, b, c, ct = 1;
    while(3 == scanf("%d%d%d", &a, &b, &c))
    {
        if(0 == a && 0 == b && 0 == c) break;
        int integer = a / b;                        // 获得整数部分
        printf("Case %d: %d.", ct++, integer);
        a %= b;         // 获得余数
        int i = 1;
        // 进行c-1次模数学拟除法求出小数点后c-1位,因为要四舍五入,所以最后一位单独处理
        while(i++ < c)
        {
            a *= 10;
            printf("%d", a / b);
            a %= b;
        }
        a *= 10;
        // 判断最后一位的下一位是否大于5,进行四舍五入
        printf("%d\n", ((a % b) * 10 / b > 5) ? (a / b + 1) : (a / b));
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/bai_134/article/details/81043500