计算2的N次方【高精度算法】

这道题某些人一看,诶,这不挺简单的吗,但是请注意他的样例

已经超过了十万,TM这还是int能够达到的极限吗?

所以我么不得不用处最后的神器——递归,啊呸,高精度

其实这道题“特别”简单,因为其实只需要输入整数n,不需要输入char字符数组(这道题有BUG),如果真的要的话,那还是老套路,整数N我怕他们会挑刺,这里就给大家科普一下

unsigned long long int 类型,占得字节数只有8(64位),数值范围是(0~18446744073709551615),也就是0~2的64次方-1。

然后后面的思路就很简单了,我就不详细讲了,那些白嫖怪拿走吧

额。。。。文章质量不佳,我也是挺崩溃的,那我还是详细讲一下吧。

第一步输入,也可以用cin,但是scanf的准度更高,而且还需要用ulld来输入,不然的话你输入的长度太高,当场就崩掉

第二步计算,通过再也熟悉不过的两重循环嵌套,但是不需要数组的循环计算,直接等于乘以二,然后简单的进位

第三步导0,这里的导0是专门用于高精度乘法的导0,大整数加法不通用

第四步输出

我真的不能再勤奋了,麻烦给个赞谢谢!

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
int a[10000000],len=1;
unsigned long long int n;
int main()
{
	scanf("%ulld",&n);
	a[1]=1;
	for (int i=1;i<=n;i++)
	{
		for (int j=1;j<=len;j++)
		{
			a[j]*=2;
		}
		for (int k=1;k<=len;k++)
		{
			if (a[k]>9)
			{
				a[k+1]+=a[k]/10;
				a[k]%=10;
				if (k==len)
				{
					len++;
				}
			}
		}
	}
	while (a[len]==0 && len>1) len--;
	for (int i=len;i>=1;i--)
	{
		printf("%d",a[i]);
	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值