如何求小数点后的第n位??

 ## 如何求小数点后的第n位??
 ** 如何求小数点后的第n位??**
 
   笔者一开始想用循环,先对这个数字一直乘10,直到我们要求的小数点后那一位,之后对其取余即可。编程实现如下: 
#include<bits/stdc++.h>
using namespace std;
int main()
{
	double a,b,n,m,i=10;
	int j;
	cin>>a>>b>>n;
	m=a/b;
	while(n)
	{
		m=m*i;
		n--;
	}
	j=(int)m;
	cout<<j%10;
 }
   但是一直时间超限emmm  why? 

    由于计算机的储存空间有限,而这个while循环会一直乘10,会导致数据过大,计算机最大2^(8*8),所以最终的数据会储存不下,导致错误。

那我们只能换一个思路—模拟除法的使用,下面举几个例子:在在上图中,笔者将余数加粗了,本算法的实现即为用计算机实现手动的除法,a除以b的实质即为不断对余数乘10再做除法(在上图可以体现)。
在上图中,笔者将余数加粗了,本算法的实现即为用计算机实现手动的除法,a除以b的实质即为不断对余数乘10再做除法(在上图可以体现)。
设被除数是a,除数是b,由于求的是小数点后的第几位,我们不妨让a*10之后与b相除,这样运算一次即为第一位小数,这一步运算过后得到的余数继续乘10再继续除以b,得到第二位小数,以此类推。

下面即为模拟除法的代码:

#include<bits/stdc++.h> 
using namespace std;
int main()
{
	int  a,b,c;
	int n;
	cin>>a>>b>>n;
	while(n)
	{
		c=a*10/b;
		a=(10*a)%b;
		n--;
	}
	cout<<c;
}
    通过做这个题我们主要明白计算机也不是万能的,有时候比较笨,储存不了太大的数据,(但是其实程序并没有漏洞,漏洞在于人的身上),我们必须不断寻找更简单更优化的方法去解决问题,同时也是自我提升的过程。
   由于是第一次写,希望得到大家斧正,如果有别的思路或问题,很乐意与大家交流。
  • 13
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值