題目鏈接: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;
}