思路:大数加法+回文判断,但是有几个测试样例没过
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool palid(string str)
{
int i = 0;
while(i < str.size()/2)
{
if(str[i] != str[str.size()-1-i])
return false;
i++;
}
return true;
}
string sum(string a, string b)
{
if(a.size() < b.size())
{
string tmp = a;
a = b;
b = tmp;
}
int leng = a.size() - b.size();
for(int i = 0; i < leng; i++)
b = '0'+b;
bool flag = false; //½øλλ
int tmp;
string ans;
for(int i = a.size()-1; i >= 0; i--)
{
tmp = a[i]+b[i]-'0'-'0' + flag;
if(tmp >= 10)
{
tmp -= 10;
flag = true;
}
else
flag = false;
ans = (char)(tmp+'0') + ans;
}
if(flag)
ans = '1' + ans;
return ans;
}
int main()
{
string str, restr, su;
while(cin >> str)
{
int i;
bool flag = false;
for(i = 1; i <= 10; i++)
{
restr = str;
reverse(restr.begin(), restr.end());
su = sum(str, restr);
cout << str << " + " << restr << " = " << su << endl;
if(palid(su))
{
flag = true;
break;
}
str = su;
}
if(flag)
cout << su << " is a palindromic number." << endl;
else
cout << "Not found in 10 iterations." << endl;
}
return 0;
}