25分求调
查看原帖
25分求调
1010145
gejiaqia楼主2024/7/19 13:02

rt

#include<bits/stdc++.h>
using namespace std;
int n;
string m;
string addm;//翻转的字符串 
int step=0; 
int k[505],b[505],c[505];//k是s1转的数字,b是s2转的数字 
string add(string s1,string s2){
	memset(k,0,sizeof k);
	memset(b,0,sizeof b);
	memset(c,0,sizeof c);//求和数组 
	int l1=s1.size();
	int l2=s2.size();
	int l3=max(l1,l2);//和数组c的长度 
	for(int i=l1,j=0;i>=0;i--,j++){//反存 
		if(s1[i]>='0'&&s1[i]<='9'){
			k[j]=s1[i]-'0';
		}else{
			k[j]=s1[i]-55;
		}
	}
	for(int i=l2,j=0;i>=0;i--,j++){//反存 
		if(s2[i]>='0'&&s2[i]<='9'){
			b[j]=s2[i]-'0';
		}else{
			b[j]=s2[i]-55;
		}
	}
	int t=0;
	for(int i=0;i<l3;i++){
		c[i]=k[i]+b[i]+t;
		t=c[i]/n;
		c[i]=c[i]%n;
	}
	if(t){
		c[l3]=1;
		l3++;
	}
	string s3="";
	for(int i=l3;i>=0;i--){
		if(c[i]>='0'&&c[i]<='9'){
			s3+=c[i]+'0';
		}else{
			s3+=char(c[i]+55);
		}
	}
	return s3;
}
int main(){
	cin>>n;
	cin>>m;
	string m2=m;
	reverse(m.begin(),m.end());//颠倒字符串
	if(m==m2){
		cout<<"STEP"<<"="<<0;
	} 
	while(1){//无限循环 
		addm=add(m,m2);//存一下结果 
		step++;//步数增加 
		string addm2=addm;//存数字 
		reverse(addm.begin(),addm.end());//颠倒 
		if(step>30||addm==addm2){//看是不是回文数 
			break;
		}
		m=addm;//继续加 
		m2=addm2;//改变一下 
	}
	if(step>30)puts("Impossible!");
	else cout<<"STEP="<<step;
	return 0;
}
2024/7/19 13:02
加载中...