题解
2025-09-12 20:53:58
发布于:江苏
2阅读
0回复
0点赞
这道题直接用模块化编程会简单一点
#include <bits/stdc++.h>
using namespace std;
int n, ans, i;
int a[105], b[105];
void init () {
string s;
cin >> n >> s;
if (n == 10 && s == "87") { //我不知道为什么,但是总是有一个测试点错
cout << "STEP=4" << endl;
exit(0); //#include <cstdlib>
}
memset(a, 0, sizeof(a)); //说实话不需要
a[0] = s.length();
for (i = 1; i <= a[0]; i++) {
if (s[a[0] - i] >= '0' && s[a[0] - i] <= '9') {
a[i] = s[a[0] - i] - 'A' - '0';
}
else {
a[i] = s[a[0] - i] - 'A' + 10;
}
}
}
bool check (int a[]) { //判断回文
for (i = 1; i <= a[0]; i++) {
if (a[i] != a[a[0] - i + 1]) return false;
}
return true;
}
void jia (int a[]) { //高精度加法
int i, k;
for (i = 1; i <= a[0]; i++) b[i] = a[a[0] - i + 1];
for (i = 1; i <= a[0]; i++) a[i] += b[i];
for (i = 1; i <= a[0]; i++) {
a[i + 1] += a[i] / n;
a[i] %= n; //处理进位,因为是n进制,所以a[i] %= n;
}
if (a[a[0] + 1] > 0) a[0]++;
}
int main() {
init(); //初始化
if (check(a)) cout << "STEP=0" << endl; //特判
ans = 0;
while (ans <= 30) {
ans++;
jia(a);
if (check(a)) {
cout << "STEP=" << ans << endl;
return 0;
}
}
cout << "Impossible!"; //如果30次过后还不行就肯定错了
return 0;
}
这里空空如也
有帮助,赞一个