pat

题目

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 (≤10^{10})$ is the initial numer and $K (≤100)$ is the maximum number of steps. The numbers are separated by a space.

Output Specification:
For each test case, output two numbers, one in each line. The first number is the paired palindromic number of $N$, and the second number is the number of steps taken to find the palindromic number. If the palindromic number is not found after K steps, just output the number obtained at the $K$th step and $K$ instead.

Sample Input:

67 3

Sample Output:

484
2

Sample Input:

69 3

Sample Output:

1353
3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

#include <cstdio>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
typedef vector<int> vi;
string s, t;
void (string t) {
int len = s.length(), carry = 0;
for(int i = 0; i < len; i++) {
s[i] = s[i] + t[i] + carry - '0';
carry = 0;
if(s[i] > '9') {
s[i] = s[i] - 10;
carry = 1;
}
}
if(carry) s += '1';
reverse(s.begin(), s.end());
}
int main(){
int K, i = 0;
cin >> s >> K;
for(i = 0;i <= K;i++){
string t = s;
reverse(t.begin(), t.end());
if(t == s || i == K) break;
add(t);
}
cout << s << endl << i;
return 0;
}