题意分析:
(1)给定一个正整数N,如不是回文数,执行N+N各位数字颠倒后组成的数,求在第几步之后得到的结果是回文数。
(2)由于涉及到调换数的位置的操作,并且当我们看到N<=10^10时,要格外注意,对于N的算术加法操作很可能造成溢出,因此还是适宜使用字符串
可能坑点:
(1)即使是用long long类型也未必保险,因为K是在100以内的。
#include <iostream>
#include <algorithm>
using namespace std;
bool isPalindromic(string num)
{
string rev=num;
reverse(rev.begin(),rev.end());
if(num==rev)return true;
else return false;
}
string getSum(string num)
{
string rev=num;
reverse(rev.begin(),rev.end());
int length=num.length();
string res="";
int i=0;
int carry=0;
int sum;
while(i<length)
{
sum=carry+num[i]-'0'+rev[i]-'0';
res+=sum%10+'0';
carry=sum/10;
i++;
}
if(carry)res+=carry+'0';
reverse(res.begin(),res.end());
return res;
}
int main()
{
string num;
int K;
cin>>num>>K;
int i=0;
while(!isPalindromic(num))
{
num=getSum(num);
i++;
if(i==K)break;
}
cout<<num<<endl;
cout<<i<<endl;
return 0;
}