60分求助
查看原帖
60分求助
1061745
yzl0225楼主2024/4/17 19:34

代码:

#include<bits/stdc++.h>
using namespace std;

string n;
#define M 1000005
int qq;
int a[M],b[M],c[3000000];
string mul(string n_a,string n_b){
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));
	memset(c,0,sizeof(c));

	int l1=0,l2=0;
	for(int i=n_a.size()-1;i>=0;i--){
		a[++l1]=n_a[i]-'0';
	}
	for(int i=n_b.size()-1;i>=0;i--){
		b[++l2]=n_b[i]-'0';
	}
	for(int i=1;i<=l1;i++){
		for(int j=1;j<=l2;j++){
			int w=i+j-1;
			c[w]+=a[i]*b[j];
			if(c[w]>9){
				c[w+1]+=c[i+j-1]/10;
				c[w]%=10;
			}		
		}
	}
	int l=l1+l2-1;
	if(c[l1+l2]!=0)
		l++;
	string ans="";
	for(int i=l;i>0;i--){
		ans=ans+((char)(c[i]+'0'));
	}
	return ans;
}
string div(string A,int n_b){
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));
	memset(c,0,sizeof(c));
	qq=0;
	int w;
	string ans="";
	for(int i=0;i<A.size();i++){
		qq=qq*10+(A[i]-48);
		w=qq/n_b;
		ans+=(char)(w+48);
		qq=qq%n_b;
	}
	if(ans.size()>1){
		while(ans[0]=='0'){
			ans.erase(0,1);
		}
	} 
	return ans;

}
string ksm(string b){
	if(b=="1") return "2";
	if(b=="0") return "1";
	string h=ksm(div(b,2));
	if(qq!=1) return mul(h,h);
	else return mul(mul(h,h),"2");
}
int main(){
	cin>>n;
	string ans="1";
	ans=ksm(n);
	ans[ans.size()-1]=ans[ans.size()-1]-1;
	cout<<ans;
	return 0;
} 

评测结果:

2024/4/17 19:34
加载中...