【题意】
判断一个数是不是对称的,若不是那么将其倒过来加上自身,重复这个过程若干次,知道达到次数上限或者得到了对称的数。最后输出得到的结果和加的次数。
【思路】
用两个字符串模拟加法的过程即可。
【注意点】
这题和上一题(1023)有相似之处,即数可能达到的值超出了unsigned long long的表示范围,需要用string模拟加法过程
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
int main(int argc, char const *argv[])
{
string str[2];
int k,cnt;
cin >> str[0] >> k;
str[1] = str[0];
reverse(str[1].begin(),str[1].end());
cnt = 0;
while(str[0]!=str[1] && cnt<k){
int up = 0,index = str[0].length()-1,digit;
string tmp;
while(index>=0){
digit = str[0][index]+str[1][index]-2*'0'+up;
tmp.insert(tmp.begin(), digit%10+'0');
up = digit/10;
index--;
}
if(up){
tmp.insert(tmp.begin(),up+'0');
}
str[0] = str[1] = tmp;
reverse(str[1].begin(),str[1].end());
cnt++;
}
cout << str[0] << endl << cnt;
system("pause");
return 0;
}