这道题某些人一看,诶,这不挺简单的吗,但是请注意他的样例
已经超过了十万,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]);
}
}