分数化小数

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

解析:这题除了需要注意数据规模外难点在于保留的小数位数要手动输入,我们需要自己写程序模拟保留小数位数的过程(注意四舍五入),要直接通过计算机的浮点运算来实现不太可能(至少我试过了不行,有大神能实现的话请在评论区贴出代码,感激不尽),因为这涉及到多次类型转换,而每次从高到低的类型转换都会直接截断导致数据丢失,所以只能按位输出,在需要输出的最后一位需要根据下一位的数值来判断是否进位。

#include<stdio.h>
int main (void)
{
    long long a,b;
    int c;
    while (scanf ("%lld%lld%d",&a,&b,&c) == 3 && !(a == 0 && b == 0 && c == 0))
    {
        printf ("%lld.",a/b);//先输出整数部分和小数点
        a %= b;
        for (int i = 1; i < c; i++)
        {
            printf ("%lld",a*10/b);
            a = a*10%b;
        }
        if (a*10%b*10/b < 5)//对需要输出的最后一位进行是否进位的判断
            printf ("%lld",a*10/b);
        else
            printf ("%lld",a*10/b+1);
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/legends_never_die/article/details/78505894