1024 Palindromic Number (25 分)
题目
A number that will be the same when it is written forwards or backwards is known as a Palindromic Number. For example, 1234321 is a palindromic number. All single digit numbers are palindromic numbers.
Non-palindromic numbers can be paired with palindromic ones via a series of operations. First, the non-palindromic number is reversed and the result is added to the original number. If the result is not a palindromic number, this is repeated until it gives a palindromic number. For example, if we start from 67, we can obtain a palindromic number in 2 steps: 67 + 76 = 143, and 143 + 341 = 484.
Given any positive integer N, you are supposed to find its paired palindromic number and the number of steps taken to find it.
Input Specification:
Each input file contains one test case. Each case consists of two positive numbers N and K, where N (≤ 1 0 10 10^{10} 1010 ) is the initial numer and K (≤100) is the maximum number of steps. The numbers are separated by a space.
Sample Input 1:
67 3
Sample Output 1:
484
2
Sample Input 2:
69 3
Sample Output 2:
1353
3
易错点
用int,只通过int存在的范围,但是这个题的范围是 1 0 10 10^{10} 1010 ,只用int将会实现不了
代码
注释部分用于测试
#include<iostream>
#include<algorithm>
using namespace std;
string add(string a,string b)
{
int l = a.length();
string d = "";
int x = 0;
string c;
for(int i = l - 1;i >= 0;i--)
{
c = ((a[i] - '0') + (b[i] - '0') + x)% 10 + '0';
x = ((a[i] - '0') + (b[i] - '0') + x) / 10;
d = c + d;
// cout << d << endl;
}
if(x == 0)
return d;
else
{
// cout << "c = " << c << endl;
d = "1" + d;
// cout << "d = " << d << endl;
}
return d;
}
int main()
{
string n;
int k;
cin >> n >> k;
int step = k;
string fzn = n;
for(int i = 0;i < k;i++)
{
reverse(fzn.begin(),fzn.end());
// cout << "n = " << n << " fzn = " << fzn << endl;
if(n == fzn)
{
step = i;
break;
}
else
{
n = add(n,fzn);
// cout << "n = " << n << " i = " << i << endl;
fzn = n;
}
}
cout << n << endl;
cout << step << endl;
return 0;
}