注意有两个测试点是,输入的时候就会有回文串。
#include <bits/stdc++.h>
using namespace std;
string Add (string a, string b) {
int flag = 0;
for (int i = a.size() - 1; i >= 0; i--) {
int u = a[i] - '0', v = b[i] - '0';
// cout << u << " " << v << endl;
if (u + v + flag > 9) {
a[i] = '0' + (u + v + flag) % 10;
flag = 1;
continue;
}
a[i] = '0' + (u + v + flag) % 10;
flag = 0;
// cout << a << endl;
}
if (flag == 1) a.insert(0, "1");
return a;
}
bool cmp (string s) {
for (int i = 0, j = s.size() - 1; i < j; i++, j--) {
if (s[i] != s[j]) return false;
}
return true;
}
int main() {
string s, a;
int n, cnt = 0, flag = 0;
cin >> s >> n;
if (cmp (s)) {
printf ("%s\n0", s.c_str());
return 0;
}
for (int i = 0; i < n; i++) {
a = s;
reverse (a.begin(), a.end());
s = Add (s, a);
cnt++;
if (cmp (s)) break;
}
printf ("%s\n%d", s.c_str(), cnt);
}