注意有两个测试点是,输入的时候就会有回文串。
#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);
}
该博客主要讨论了如何处理回文串问题,通过提供一个名为`Add`的函数实现两个字符串相加,并检查结果是否为回文串。在主函数中,对于给定的字符串和一个整数n,它会进行多次字符串反转和相加操作,直到得到回文串为止,输出最小的操作次数。
132

被折叠的 条评论
为什么被折叠?



