返回目录
题意
定义一种操作:让一个整数加上这个整数首尾颠倒后的数。比如对1257执行这种操作,就是1257+7521=8778。现在给出一个正整数和操作次数限制,问在限定的操作次数内能是否能得到回文数。如果能得到,则输出那个回文数, 并输出操作的次数;否则,输出最后那次操作得到的数字以及操作次数。
样例(可复制)
67 3
//output
484
2
69 3
//output
1353
3
注意点
- 本题虽然是大整数运算,但过程中比较简单,所以直接当成字符串处理起来比较方便,如果使用大整数模板,代码量较大
- 对于输入就是回文数的时候,直接输出该数和次数0
#include<bits/stdc++.h>
using namespace std;
bool judge(string a){
for(int i=0;i<a.size()/2;i++)
if(a[i]!=a[a.size()-i-1])return false;
return true;
}
int main(){
string a,b;
int step;
cin>>a>>step;
if(judge(a)){
cout<<a<<"\n0";
return 0;
}
for(int i=1;i<=step;i++){
int puls=0;
b=a;
reverse(b.begin(),b.end());
for(int j=0;j<a.size();j++){
int tmp=a[j]-'0'+b[j]-'0'+puls;
a[j]=tmp%10+'0';
puls=tmp/10;
}
if(puls!=0)a+=(puls+'0');
if(judge(a)){
cout<<a<<"\n"<<i;
return 0;
}
reverse(a.begin(),a.end());
}
cout<<a<<"\n"<<step;
return 0;
}