求大佬帮下忙,输入参考输出的是impossible
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
#define maxlen 2500
#define rmaxlen 3000
string add_s1, add_s2;
int add_a[maxlen], add_b[maxlen], add_c[rmaxlen];
string func_add(string add_s1, string add_s2,int n)
{
memset(add_a, 0, sizeof(int) * maxlen);
memset(add_b, 0, sizeof(int) * maxlen);
memset(add_c, 0, sizeof(int) * rmaxlen);
int len = add_s1.length();
for (int i = 0; i < len; i++)
{
add_a[len - 1 - i] = add_s1[i] - '0';
}
len = add_s2.length();
for (int i = 0; i < len; i++)
{
add_b[len - 1 - i] = add_s2[i] - '0';
}
if (add_s1.length() > len)
{
len = add_s1.length();
}
for (int i = 0; i < len; i++)
{
add_c[i] += add_a[i] + add_b[i];
if (add_c[i] >= n)
{
add_c[i + 1] += add_c[i] / n;
add_c[i] %= n;
}
}
if (add_c[len] > 0)
{
len++;
}
string add_ans;
for (int i = len - 1; i >= 0; i--)
{
add_ans += add_c[i] + '0';
}
return add_ans;
}
string change(string t)
{
int len = t.length();
string ans;
for (int i = len - 1; i >= 0; i--)
{
ans += t[i] + '0';
}
return ans;
}
bool isPalindromes(string t)
{
int len = t.length();
int i = 0;
int j = len - 1;
while (len--)
{
if (len / 2 < i)
{
break;
}
if (t[i] != t[j])
{
return false;
}
i++;
j--;
}
return true;
}
int main()
{
string t;
int n;
int i = 0;
cin >> n >> t;
while (!isPalindromes(t))
{
string b = change(t);
if (!isPalindromes(t))
{
i++;
t = func_add(t,b,n);
if (i > 30)
{
break;
}
}
else
{
break;
}
}
if (i >= 30)
{
cout << "Impossible!" << endl;
}
else
{
cout << "STEP=" << i << endl;
}
return 0;
}