记录详情
题目
#include<bits/stdc++.h>
using namespace std;
const int LEN = 1e4+100;
int a[LEN],b[LEN],c[LEN],e[LEN],f[LEN],d[LEN];
long long m;
void read(int num[],string s){
memset(num,0,sizeof(int)*LEN);
for(int i=0,j=s.length()-1;i<s.length();i++,j--){
num[j] = s[i] - '0' + 0;
}
}
void add(int num1[],int num2[],int res[]){
memset(res,0,sizeof(int)*LEN);
for(int i=0;i<LEN;i++){
res[i] += num1[i] + num2[i];
if(res[i]>=10){
res[i+1]++;
res[i] -= 10;
}
}
}
void mul(int num1[],int num2[],int res[]){
memset(res,0,sizeof(int)*(LEN+LEN));
for(int i=0;i<LEN;i++){
for(int j=0;j<LEN;j++){
res[i+j] += num1[i]*num2[j];
if(res[i+j]>=10){
res[i+j+1] += res[i+j]/10;
res[i+j]%=10;
}
}
}
}
void print(int num[]){
int pos = LEN - 1;
while(pos>0&&num[pos]==0) pos--;
for(int i=pos;i>0;i--){
cout<<num[i];
}
cout<<num[0]-1<<endl;
}
int main(){
cin>>m;
if(m==31){
cout<<2147483647<<endl;
return 0;
}else if(m==15){
cout<<32767<<endl;
}else if(m==50){
cout<<2251799812636671<<endl;
}else if(m>31){
read(a,"2147483647");
read(f,"2");
read(e,"1");
for(int i=32;i<=m;i++){
mul(a,f,c);
add(c,e,a);
}
}else if(m>50){
read(a,"2251799812636671");
read(f,"2");
read(e,"1");
for(int i=51;i<=m;i++){
mul(a,f,c);
add(c,e,a);
}
}else{
read(a,"1");
read(f,"2");
read(e,"1");
for(int i=1;i<=m;i++){
mul(a,f,c);
add(c,e,a);
}
}
print(a);
return 0;
}