#include <iostream>
#include <cmath>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
vector<int> a,b;
void reverse(){
int num=a.size();
b.clear();
for(int i=0;i<num;i++){
b.push_back(a[num-i-1]);
}
}
bool judge(vector<int> a){
int num=a.size();
for(int i=0;i<num/2;i++){
if(a[i]!=a[num-i-1])
return false;
}
return true;
}
int main(){
int N;
string M,str;
cin>>N>>M;
int ans=0;
for(int i=0;i<M.size();i++){
if((M[i])>='A') a.push_back(M[i]-'A'+10);
else{
a.push_back(M[i]-'0');}
}
while((!judge(a))&&!(ans==30)){
ans++;
reverse();
int jinwei=0;
int sum=0;
for(int i=0;i<a.size();i++){
sum=a[i]+b[i];
a[i]=(sum+jinwei)%N;
jinwei=(sum+jinwei)/N;
}
if(jinwei)a.push_back(jinwei);
}
if(ans==30&&(!(judge(a)))) cout<<"Impossible!";
else{cout<<"STEP="<<ans;}
return 0;
}
这题写了很久很久,但确实收获也很大
1.学习如何将数据(int or string)转置
2.如何判断一个数据(int or string)是否回文
3.如何将string型的数字转化为int型[通过ascii转换]
4.如何将一个16进制的string数据转化为int型[也通过ascii进行转换]
5.如何处理进位