分数化小数

来源:互联网 发布:电脑报淘宝生活馆 编辑:程序博客网 时间:2024/05/17 18:03

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