题目链接:https://www.patest.cn/contests/pat-a-practise/1024
题目大意:判断a是否是回文数,若不是则计算a+(a的逆置)是否是回文数,如此迭代。若迭代k轮之后仍不是回文数,输出第k轮的a+(a的逆置)
解题思路:
- 注意溢出的问题,long long也是会溢出的,会有两个测试点不通过,所以要用字符串存储数字
- 字符串可以使用函数reverse()来进行逆置
代码如下:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string add(string a,string b){
int tmp=0;
string c=a;
for(int i=b.length()-1;i>=0;i--){
c[i]=(a[i]+b[i]-'0'-'0'+tmp)%10+'0';
if((a[i]+b[i]-'0'-'0'+tmp)<10)
tmp=0;
else
tmp=1;
}
if(tmp==1)
c='1'+c;
return c;
}
int main(int argc, char const *argv[])
{
string a;
int k;
cin>>a>>k;
int c;//c保存迭代的次数
for(c=0;c<k;c++){
string s=a;
reverse(s.begin(),s.end());
if(a==s)//判断是否是回文数
break;
a=add(a,s);
}
cout<<a<<endl<<c<<endl;
return 0;
}