注意做变换之前检查一遍输入的数是否已经符合要求了。
注意单位数的都是符合要求的。
#include<cstdio>
#include<vector>
#include<string>
#include<iostream>
#include<queue>
#include<set>
#include<algorithm>
#define maxn 22
using namespace std;
string reverse_add(string rev) {
int in = 0;
string str;
for (int i = 0; i < rev.size(); i++) {
int a = rev[rev.size() - 1 - i] + rev[i] + in - '0' - '0';
if (a > 9) {
str += a % 10 + '0';
in = 1;
}
else {
str += a + '0';
in = 0;
}
}
if (in == 1) str += '1';
return str;
}
bool check_reverse(string str) {
if (str.size() == 1) return true;
for (int i = 0; i * 2 < str.size(); i++) {
if (str[i] != str[str.size() - i - 1]) return false;
}
return true;
}
int main() {
string num, rev;
int K;
cin >> num >> K;
if (check_reverse(num)) {
cout << num << endl;
cout << 0 << endl;
return 0;
}
int c = 0;
for (int i = 0; i < num.size(); i++) {
if (num[i] != '0') break;
else c++;
}
while(c--) {
num.erase(0);
}
for (int i = num.size() - 1; i >= 0; i--) {
rev += num[i];
}
int j;
for (j = 0; j < K; j++) {
rev = reverse_add(rev);
if (check_reverse(rev)) break;
}
for (int i = rev.size() - 1; i >= 0; i--) {
printf("%c", rev[i]);
}
printf("\n%d\n", j == K ? K : j + 1);
return 0;
}