• 分数化小数


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

    测试数据:

    样例输入:
    1 6 4
    0 0 0

    样例输出:
    Case 1: 0.1667

    手动模拟除法的运算,用小时候的学的不停“乘10取余”法即可解决。先输出小数点前的数字,由于测试样例中最后一位需要四舍五入,因此先输出前c-1位,最后第c位根据c+1位判断是否舍入。

    #include <stdio.h>int main()
    {
        int a,b,c,kase = 0;
        while (~scanf("%d%d%d", &a, &b, &c))
        {
            if (!a && !b && !c) break;//如果a,b,c中有一个为0则跳出
            kase++;
            //先输出小数点前的数字
            printf("Case: %d: %d.", kase, a/b);
            a %= b;
            //输出小数点后的c-1位
            for (int i = 0; i < c-1; ++i) 
            {
                a *= 10;
                printf("%d", a/b);
                a %= b; //跳出时a为c-1位运算后的余数
            }
            //考虑最后一位四舍五入
            int more = ((a*10)%b * 10) / b; //观察第c位的后一位
            if (more >= 5)
                printf("%d
    ", (a*10)/b + 1);
            else printf("%d
    ", (a*10)/b);
        }
        return 0;
    }
  • 相关阅读:
    数数小木块
    猴子吃桃问题
    整除个数
    大小写互换
    车牌号
    比较字母大小
    队花的烦恼一
    字母小游戏
    字符串逆序输出
    茵茵的第一课
  • 原文地址:https://www.cnblogs.com/2228212230qq/p/7857936.html
Copyright © 2020-2023  润新知