PAT (niveau avancé) pratique 1024 nombre palindromique (25 分)

1024 Nombre Palindromique (25 分)

sujet

Un nombre qui sera le même lorsqu'il est écrit en avant ou en arrière est connu sous le nom de nombre palindromique. Par exemple, 1234321 est un nombre palindromique. Tous les nombres à un chiffre sont des nombres palindromiques.

Les nombres non palindromiques peuvent être associés à des nombres palindromiques via une série d'opérations. Tout d'abord, le nombre non palindromique est inversé et le résultat est ajouté au nombre d'origine. Si le résultat n'est pas un nombre palindromique, ceci est répété jusqu'à ce qu'il donne un nombre palindromique. Par exemple, si nous partons de 67, nous pouvons obtenir un nombre palindromique en 2 étapes: 67 + 76 = 143, et 143 + 341 = 484.

Étant donné tout entier positif N, vous êtes censé trouver son nombre palindromique apparié et le nombre de pas effectués pour le trouver.

Spécification d'entrée:

Chaque fichier d'entrée contient un cas de test. Chaque cas se compose de deux nombres positifs N et K, où N (≤ 1 0 10 10 ^ {10}1 01 0 ) est le nombre initial et K (≤100) est le nombre maximum de pas. Les nombres sont séparés par un espace.

Exemple d'entrée 1:

67 3

Exemple de sortie 1:

484
2

Exemple d'entrée 2:

69 3

Exemple de sortie 2:

1353
3

Sujette aux erreurs

Utilisez int, ne transmettez que la plage de int, mais la plage de cette question est 1 0 10 10 ^ {10}1 01 0 , il ne sera pas possible d'utiliser uniquement int

Code

La partie commentaire est utilisée pour les tests

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

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43820008/article/details/113992639
conseillé
Classement