前言
正文
参考题解
#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;
}