这道题,注意:当输入本身即是回文数时不用进行相加,直接输出即可。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e4+100;
bool is_palindromic(int ans[],int len)
{
bool flag = true;
int i=0, j=len-1;
while(i<len && j>=0)
{
if(ans[i] != ans[j])
{
flag = false;
// cout<<"ans[i]="<<ans[i]<<" j="<<j<<"ans[j]="<<ans[j]<<endl;
break;
}
i++,j--;
}
return flag;
}
void printNum(int num[],int len)
{
for(int i=0; i<len; i++)
cout<<num[i];
}
int main()
{
string t; cin>>t;
// if(t == "0")
// {
// cout<<0<<" is a palindromic number."<<endl;
// return 0;
// }
int len = t.length(),i;
int x[maxn],y[maxn],ans[maxn],tmpe[maxn];
int n = 10;
for(i=0; i<len; i++)
{
x[i] = t[i]-'0';
}
for(i=len-1; i>=0; i--)
{
y[i] = x[len-1-i];
}
bool flag = false;
if(is_palindromic(x,len))
{
printNum(x,len);
cout<<" is a palindromic number."<<endl;
return 0;
}
while(n--)
{
printNum(x,len); cout<<" + ";
printNum(y,len); cout<<" = ";
int tmp=0, res=0, cnt=0;
for(i=0; i<len; i++)
{
tmp = x[i] + y[i] + res;
res = tmp/10;
tmpe[cnt++] = tmp%10;
}
while(res!=0)
{
tmpe[cnt++] = res%10;
res = res/10;
}
len = cnt;
for(i=0; i<len; i++)
{
ans[i] = tmpe[len-1-i];
}
printNum(ans,len);
if(is_palindromic(ans,len))
{
flag = true;
cout<<endl;
break;
}
for(i=0; i<len; i++)
{
x[i] = ans[i];
y[i] = ans[len-1-i];
}
cout<<endl;
}
if(flag)
{
printNum(ans,len);
cout<<" is a palindromic number."<<endl;
}else
{
cout<<"Not found in 10 iterations."<<endl;
}
return 0;
}
/*
*/