前言

传送门

正文


参考题解

#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;
}