前言

传送门

正文

参考题解

#include<iostream>
#include<vector> 
#include<algorithm>
using namespace std;
/* 题意:回文数,给定初始正整数n和最大操作步数k,若在k步操作之后还是找不到一个回文数, 则输出第k步的结果以及k,否则输出回文数和变换为该回文数时的操作步数。 每次操作是将该数顺序和逆序数相加得到一个新的数。 思路:大整数运算 ,注意输入若是单位数,则输出该数本身,同时操作次数为0 */
/*返回a+b*/
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=0,k;
	cin>>n>>k;
	string res;
	while(i<=k){
		temp=n;
		reverse(n.begin(),n.end());
		if(temp==n){
			cout<<temp<<endl<<i;
			break;
		}
		i++;
		res=bigAdd(temp,n); 
		n=res;
		if(i==k+1){
			cout<<temp<<endl<<i-1;
			break;
		}
	}
	return 0;
}