【白书之路】 分数化小数 高精度小数运算

来源:互联网 发布:吉林师范大学知乎 编辑:程序博客网 时间:2024/05/01 08:43

2-5:分数化小数

输入和正整数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 <iostream>#include <stdio.h>using namespace std;int get_dec(int a,int b,int c,int *dec){    int i,carry=0;    for(i=0; i<=c; i++) //计算到第c+1位    {        a*=10;        dec[i]=a/b;        a=a%b;    }    if(dec[c]>=5)//如果最后一位发生进位    {        carry=1;        for(i=c-1; i>=0; i--)//进位前传        {            dec[i]=(dec[i]+carry)%10;            carry=(dec[i]+carry)/10;        }    }    return carry;//返回最终的进位}int main(){    int a,b,c;    int Int,i;    int dec[110];    int cas=0;    while(~scanf("%d%d%d",&a,&b,&c)&&(a||b||c))    {        Int=a/b;        printf("Case %d: %d",++cas,Int+get_dec(a%b,b,c,dec));        if(c)            printf(".");        for(i=0; i<c; i++)        {            printf("%d",dec[i]);        }        printf("\n");    }    return 0;}


1 0