#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int n;
string num;
// 判断一个字符串是否为回文串
bool is_palindrome(string s) {
string r=s;
reverse(r.begin(), r.end());
return s == r;
}
// 对输入的字符串表示的数进行翻转,返回新的字符串
string reverse_string(string s) {
string r=s;
reverse(r.begin(), r.end());
return r;
}
// 对两个字符串表示的数(都已经翻转了)进行N进制加法,返回新的字符串
string add(string s1, string s2) {
string s=s1;
int carry = 0;
for (int i = 0; i < s.size(); ++i) {
int sum = s[i] - '0' + s2[i] - '0' + carry;//每一位相加
s[i] = sum % n + '0';//每一位最终的值
carry = sum / n;//进位,假如10进制8+6;那么carry=1;
}
if (carry) {
s += '1';
}
return s;
}
int main(){
cin >> n >> num;
if (is_palindrome(num)) { // 特判输入的数本身就是回文数的情况
cout << 0;
return 0;
}
int sum = 0;
for(int i = 1; i <= 30; i++){
string s = reverse_string(num);
sum++;
num=add(num, s);
if(is_palindrome(num)){
cout << "STEP=" << sum;
break;
}
}
if(sum==30)
cout << "Impossible!";
return 0;
}
没晓得哪里有问题,只能拿75分。