代码:
#include <iostream>
#include <cstring>
using namespace std;
int as[15], bs[15], cs[15];
int isPal(int a, int xf)//后面的参数为0返回是否为回文
{
int t = a, ans = 0;
while (t > 0)
{
ans = ans * 10 + t % 10;
t /= 10;
}
if (xf == 0) return (a == ans);
return ans;
}
int add(int x, int a, int b)
{
memset(as, 0, sizeof as);
memset(bs, 0, sizeof bs);
memset(cs, 0, sizeof cs);//cs存答案
int cur = 15;
while (a > 0 || b > 0)
{
as[--cur] = a % 10;
bs[cur] = b % 10;
a /= 10;
b /= 10;
}
for (int i = 14; i >= cur; --i)
{
if (as[i] + bs[i] >= x)
{
cs[i - 1]++;
if (i == cur) cur--;
cs[i] += (as[i] + bs[i]) % x;
}
else
{
cs[i] += as[i] + bs[i];
}
}
int c = 0;
for (int i = 15; i >= cur; --i)
{
c = c * 10 + cs[i];
}
return c;
}
int main()
{
int cnt = 0;
int a;//a进制
cin >> a;
int n;
cin >> n;
for (int i = 1; i <= 30; ++i)
{
n = add(a, n, isPal(n, 1));//加上倒数
cnt++;
if (isPal(n, 0)) break;
}
if (!isPal(n, 0)) cout << "Impossible!" << endl;//30步后仍非回文
else cout << "STEP=" << cnt << endl;
return 0;
}
自己下了评测点1,
2 10011
答案4我输出16,求大佬debug