4012. Problem G:求倒数

这篇博客介绍了一种巧妙的方法来计算大于2的自然数n的倒数1/n的小数部分,特别是在处理精度问题时。通过将1扩大10倍并除以n,可以逐位获取小数点后的数字,避免了复杂的除法运算。这种方法特别适用于求解小数点后N位有效数字的问题,且能够有效地去除末尾的0。博主给出了具体的代码实现,并通过样例解释了算法的运行过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#问题描述

给定一个大于2的自然数n,求1/n。要求输出小数点后N位有效数字(小数点前的0和小数点不输出),2≤N≤5000。不输出N位有效数字中末尾的0。

#输入描述

输入文件中包含多个测试数据。每个测试数据占一行,为两个自然数n和N。输入文件最后一行为0,表示输入结束。

#输出描述:

对输入文件中的每个测试数据,按要求输出1/n的N位有效数字。

#样例输入:

4 8
7 8
0

#样例输出:

25
14285714

#思路

假如按照正常情况用1/n得到小数点后的,对于一些除不完等数据进行精度处理较为麻烦。我们既然是想要小数点后的数,可以在第一次对1进行扩大10倍,再除以n就得到小数点后第一位数,存入数组,再将余出来的数进行扩大10倍进而求下一位数,用循环进行嵌套N次,就可以得到小数点后N位,再对数组进行去零操作即可。

例如:4 8 输出: 25

1、110/4=2;第一位数
2、1
10%4=2;用作下一次扩大的数
3、210/4=5;
4、2
10%4=0;
5、后面取到的数均为0
6、答案为25000000

优点:成功的把除法转化为乘法!

代码:

# include<iostream>
using namespace std;

int main
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

混子王江江

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

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

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

打赏作者

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

抵扣说明:

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

余额充值