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 N 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 N N and K K K, where N ( ≤ 1 0 10 ) N (≤10^{10}) N(≤1010) is the initial numer and K ( ≤ 100 ) K (≤100) 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 N 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 K K steps, just output the number obtained at the K K Kth step and K K K instead.
Sample Input 1:
67 3
Sample Output 1:
484
2
Sample Input 2:
69 3
Sample Output 2:
1353
3
Solution:
// Talk is cheap, show me the code
// Created by Misdirection 2021-08-14 13:15:14
// All rights reserved.
#include <iostream>
#include <vector>
using namespace std;
int main(){
string n;
int k, i, len;
bool isPali = true;
cin >> n >> k;
len = n.length();
for(int i = 0; i < n.length(); ++i){
if(n[i] != n[len - i - 1]){
isPali = false;
break;
}
}
if(isPali){
printf("%s\n0\n", n.c_str());
return 0;
}
for(i = 1; i <= k; ++i){
// 先相加 再判断是不是回文
int carry = 0;
len = n.length();
string rs;
for(int j = 0; j < len; ++j) rs = n[j] + rs;
for(int j = 0; j < len; ++j){
int tmp = (rs[len - j - 1] - '0' + n[len - j - 1] - '0') + carry;
carry = tmp / 10;
tmp %= 10;
n[len - j - 1] = (char)('0' + tmp);
}
if(carry != 0) n = (char)(carry + '0') + n;
isPali = true;
len = n.length();
for(int i = 0; i < n.length(); ++i){
if(n[i] != n[len - i - 1]){
isPali = false;
break;
}
}
if(isPali){
printf("%s\n%d\n", n.c_str(), i);
return 0;
}
}
if(i == k + 1) printf("%s\n%d\n", n.c_str(), k);
return 0;
}