华师 PTA 2020程序设计基础实验作业题目集 编程题 #19 AC

第十九题
3-17简单循环 模拟除法 求2个正整数相除所得小数结果的小数点后的第n位数字 (5分)

题目描述

分数a/b化为小数后,小数点后第n位的数字是多少?

输入格式

三个正整数a,b,n,相邻两个数之间用单个空格隔开。a,b均小于10000000,1≤n≤10000。

输出格式

一个数字 。

3-17简单循环 模拟除法 求2个正整数相除所得小数结果的小数点后的第n位数字 (5分)
这一题就开始接触 高精度运算之模拟除法
听起来玄乎,其实不然
模拟就是模仿着人怎么计算除法,机器就怎么计算除法
想想自己,是不是可以将除法计算到小数点后任意位

那我们就从人怎么计算除法开始研究

这里计算 1/7
这是用手计算的部分
手算
亲手尝试过后
我们就会发现
我们每次计算就是求余整除补零运算
用运算符表达就是

1 / 7 = 0, 1 % 7 = 1, 余数补零
10 / 7 = 1, 10 % 7 = 3, 余数补零
30 / 7 = 4, 30 % 7 = 2, 余数补零
20 / 7 = 2, 20 % 7 = 6 

在这里插入图片描述
这个不就是我们刚才手算得数

接下来就是用程序实现

#include<iostream>
using namespace std;

int main() {
    int a, b, n, ans = 0;
    cin >> a >> b >> n;
    a = a % b;//先将a%b是因为题目要求的n是小数点后第n位
    for(int i = 0; i < n; ++i) {
    //i从零开始计数,到n - 1结束,即是进行n次计算,等价于for(int i = 1; i <= n; ++i)
        a = a * 10;//补零
        ans = a / b;//除法
        a = a % b;//求余,为计算下一位准备
    }
    cout << ans;
    return 0;
}

提交结果如下
简简单单
好耶,又解决一题!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值