PAT (Advanced Level) Practice 1024 Palindromic Number (25 分)

1024 Palindromic Number (25 分)

topic

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

Error-prone

Use int, only pass the range of int, but the range of this question is 1 0 10 10^{10}101 0 , it will not be possible to use only int

Code

The comment part is used for testing

#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;
}

Guess you like

Origin blog.csdn.net/weixin_43820008/article/details/113992639