【高精度小数】中国大学(第六周编程练习)

输入格式:

形如

 

 

 a/b 的两个数,其中10<=a<b<100。也就是说,这个小数一定是小于1的正数。

提示:输入是带着两个数中间的“/”的,所以scanf应采用“%d/%d”这样的输入格式。

 

输出格式:

形如

    0.xxxxxxxxx 的小数,小数点后最多200位。输出结束的时候要带着回车换行。如果a/b是一个有限不循环小数,则输出完所有的有效位就可以了,不需要再输出后面的0来凑满200位。

输入样例:

16/19

输出样例: 0.84210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684

#include <stdio.h>

int main()
{
    int a, b, i, c;
    scanf("%d/%d", &a, &b);

    printf("0.");   //先输出小数点和0

    for(i=0;i<200;i++){

//循环200次,如果是无限小数,输出小数点后200位。
        c= (10*a)/b;   

 //应为是int 型将被除数扩大10倍,保证可以得到小数点后一位数并赋值给c
        a = (a*10 ) % b;

//将a扩大十倍并求余,把余数赋值给a为下次计算准备,
        printf("%d",c);
        if (a==0)   

//如果a为零,说明结果为有限小数,此时结果已算出,结束循换。
            break;

    }
    return 0;
}

这道题的思路主要是利用了,在用竖式计算时,在算不尽时,在余数后面补0,(相当是扩大十倍)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值