测试数据:
格式: 前两行输入,第三行输出。
2
10011
STEP=4
16
AC27
STEP=6
10
89
STEP=24
2
101111
Impossible!
我的代码如下,没有难理解的地方,大家自行看看。
参考代码:
#include <bits/stdc++.h> using namespace std; string text; int k, ch[400], len; // 回文判断 bool ok(int s[]) { for(int i = 0; i < len / 2; ++i) { if(s[i] != s[len - i - 1]) return false; } return true; } // 字符串转整数 void s2i(string s) { for(int i = 0, len = s.size(); i < len; ++i) { if(isdigit(s[i])) { ch[i] = s[i] - '0'; } else { ch[i] = s[i] - 55; } } } // 大数加法 void BigNumberAdd(int s[]) { int tmp[400]; for(int i = len - 1, j = 0; i >= 0; --i, ++j) { tmp[j] = s[i]; } int t = 0; for(int i = 0; i < len; ++i) { int num = t + tmp[i] + s[i]; ch[i] = num % k; t = num/ k; } while(t) { ch[len++] = t % k; t = t / k; } reverse(ch, ch + len); } int main() { int step = 0; cin >> k >> text; len = text.size(); s2i(text); while(1) { if(ok(ch)) { printf("STEP=%d\n", step); return 0; } BigNumberAdd(ch); if(step++ == 30) { printf("Impossible!\n"); return 0; } } return 0; }
0.0分
4 人评分