习题2-5 分数化小数(decimal)

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

//version 1 未考虑double型数据的有效数字只有15-16位
#include <stdio.h>
int main()
{
    int a,b,c,count=1;
    while(scanf("%d%d%d",&a,&b,&c)!=EOF){
        if(a==0&&b==0&&c==0)
            break;
        printf("Case %d:%.*lf\n",count++,c,(double)(a)/b);
        //printf("%*.*lf", x, y, z); 
        //意思是输出带宽为x,小数点后y为的double型数据z
    }
    return 0;
}

可用 1 6 58 测试。

//version 2 未考虑小数部分第c位是9,即四舍五入后还需进位
#include <stdio.h>
int main()
{
    int a,b,c,tmp,count=1;
    while(scanf("%d%d%d",&a,&b,&c)!=EOF){
        if(a==0&&b==0&&c==0)
            break;
        printf("Case %d:%d.",count++,a/b);//整数部分
        a=a%b*10;
        while(c-->1){//小数点后前c-1位
            printf("%d",a/b);
            a=a%b*10;
        }
        tmp=a%b*10/b;//tmp是初始a/b的小数点后第c+1位数字
        if(tmp<5)
            printf("%d\n",a/b);
        else
            printf("%d\n",a/b+1);
    }
    return 0;
}


可用【3930 1687 4】、【3930 1687 3】测试。


//version 3
#include <stdio.h>
int main()
{
    int a,b,c,tmp,i,t,count=1;;
    int s[110];//用于保存小数点后的部分
    while(scanf("%d%d%d",&a,&b,&c)!=EOF){
        if(a==0&&b==0&&c==0)
            break;
        t=a/b;
        a=a%b*10;
        for(i=1;i<c;i++){//小数点后前c-1位保存到数组s中
            s[i]=a/b;
            a=a%b*10;
        }
        tmp=a%b*10/b;//tmp是初始a/b的小数点后第c+1位数字
        if(tmp<5)
            s[i]=a/b;//s[i]即s[c]
        else
            s[i]=a/b+1;
        while(i>1){
            if(s[i]==10){
                s[i]-=10;
                s[i-1]+=1;
            }
            i--;
        }
        if(s[1]==10){
            s[1]-=10;
            t++;
        }
        printf("Case %d:%d.",count++,t);
        for(i=1;i<=c;i++)
            printf("%d",s[i]);
        printf("\n");
    }
    return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值