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

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;
}


你可能感兴趣的:(分数化小数,白书之路,高精度小数运算)