/**
* 1.解题思路:将字符串倒置与原字符串比较看是否相等可知s是否为回文串
* 字符串s和它的倒置t相加,只需从头到尾相加然后再倒置
* (记得要处理最后一个进位carry,如果有进位要在末尾+’1’)
* 倒置可采用algorithm头文件里面的函数reverse(s.begin(), s.end())直接对s进行倒置
*
* 2.参考博客:https://www.liuchuo.net/archives/4200
**/
#include <iostream>
#include <algorithm>
using namespace std;
//倒置
string rev(string s) {
reverse(s.begin(), s.end());
return s;
}
//字符串s和它的倒置t相加
string add(string s1, string s2) {
string s = s1;
int carry = 0;
for (int i = s1.size() - 1; i >= 0; i--) {
s[i] = (s1[i] - '0' + s2[i] - '0' + carry) % 10 + '0';
carry = (s1[i] - '0' + s2[i] - '0' + carry) / 10;
}
//处理最后一个进位
if (carry > 0) s = "1" + s;
return s;
}
int main() {
string s, sum;
int n = 10;
cin >> s;
if (s == rev(s)) {
cout << s << " is a palindromic number.\n";
return 0;
}
while (n--) {
sum = add(s, rev(s));
cout << s << " + " << rev(s) << " = " << sum << endl;
if (sum == rev(sum)) {
cout << sum << " is a palindromic number.\n";
return 0;
}
s = sum;
}
cout << "Not found in 10 iterations.\n";
return 0;
}
1079 延迟的回文数
最新推荐文章于 2020-03-22 11:04:41 发布