本来打算写输入n,输出2n−1的,但为啥变成了22n−1
#include<bits/stdc++.h>
using namespace std;
struct bigint{//10:[0,1]
unsigned long long d[1500];
};
const unsigned long long mod=1000000000;
bigint times(bigint a,bigint b){
long long s=0;
bigint ans={{0}};
for(int i=0;i<1500;i++){
for(int j=0;j<1500-i;j++){
s=a.d[i]*b.d[j];
ans.d[i+j]+=s%mod;
ans.d[i+j+1]+=s/mod;
}
}
for(int i=0;i<1500;i++){
a.d[i+1] += a.d[i]/mod;
a.d[i]%=mod;
}
return ans;
}
bigint ksm(bigint a,int b){
bigint res={{1}};
while(b){
if(b&2) res=times(res,a);
a=times(a,a);
b>>=1;
}
return res;
}
void print(bigint a){
for(int i=1499;i>=1;i--) if(a.d[i]!=0) cout<<a.d[i];
cout<<a.d[0]-1;
}
int main(){
int n;
bigint two={{2}};
cin>>n;
print(ksm(two,n));
}