前言
正文
参考题解
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
/* 题意:给出一个数字,如果它不是回文数字,就将它和它的逆序数相加, 直到变成回文数字或者相加次数超过10次,要求输出过程中的表达式, 这题和A1024一样,也都是大整数加法 。尤其注意所给初始数本身就是回文数的情况 */
string bigAdd(string a,string b){
string res;//结果串
int k=0;//进位
int lenA=a.size(),lenB=b.size();
for(int i=0;i<lenA&&i<lenB;i++){
int sum=a[i]-'0'+b[i]-'0'+k;
if(sum>=10){
res+=sum-10+'0';
k=1;
}else{
res+=sum+'0';
k=0;
}
}
if(k==1)res+='1';//最高位
reverse(res.begin(),res.end());//注意换回原先的顺序
return res;
}
int main(){
string n,temp;
int i=1;
cin>>n;
string res;
while(i<=10){
temp=n;
reverse(temp.begin(),temp.end());
if(temp==n){
cout<<n<<" is a palindromic number."<<endl;
break;
}
res=bigAdd(temp,n);
cout<<n<<" + "<< temp<<" = "<<res<<endl;
temp=res;
reverse(temp.begin(),temp.end());
if(temp==res){
cout<<res<<" is a palindromic number."<<endl;
break;
}
i++;
n=res;
if(i==11){
cout<<"Not found in 10 iterations."<<endl;
break;
}
}
return 0;
}