答案是高精度。
2P也是高精度。
这道题总共用到了快速幂与高精度乘法。
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
void powermod(int a[],int b[]) //高精度乘法。
{
int c[510]={0};
for(int i=0;i<500;i++)
{
for(int j=0;j<500;j++)
if(j+i<500) //确保位数在500以内。
c[i+j]+=a[i]*b[j];//*******
for(int j=0;j<500;j++)
if(c[j]>=10)
c[j+1]+=c[j]/10,c[j]%=10; //这道题可以压位。
}
memcpy(a,c,501*sizeof(int));
}
int main()
{
int a[510]={1},b[510]={2};
int p;
cin>>p;
cout<<int(double(p)*log10(2.0))+1<<endl;
while(p) //快速幂
{
if(p&1) //当为奇数时。
powermod(a,b); //相当于a*=b
powermod(b,b);//相当于b*=b;
p>>=1;
}
int hehe=0;
a[0]--;
for(int i=499;i>=0;i--)
{
cout<<a[i];
hehe++;
if(hehe==50)
{
hehe=0;
cout<<endl;
}
}
return 0;
}