PAT-1019 Numéro Palindromique Général


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.

Bien que les nombres palindromiques soient le plus souvent considérés dans le système décimal, le concept de palindromicité peut être appliqué aux nombres naturels dans n'importe quel système numérique. Considérons un nombre N> 0 en base b≥2, où il est écrit en notation standard avec k + 1 chiffres ai comme ∑i = 0k (aibi). Ici, comme d'habitude, 0≤ai <b pour tout i et ak est non nul. Alors N est palindromique si et seulement si ai = ak − i pour tout i. Zéro s'écrit 0 dans n'importe quelle base et est également palindromique par définition.

Étant donné tout entier décimal positif N et une base b, vous êtes censé dire si N est un nombre palindromique en base b.

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 b, où 0 <N≤109 est le nombre décimal et 2≤b≤109 est la base. Les nombres sont séparés par un espace.

Spécification de sortie:

Pour chaque cas de test, imprimez d'abord sur une ligne Yessi N est un nombre palindromique en base b, ou Nosinon. Puis dans la ligne suivante, imprimez N comme le nombre en base b sous la forme «ak ak − 1… a0». Notez qu'il ne doit pas y avoir d'espace supplémentaire à la fin de la sortie.

Exemple d'entrée 1:

27 2

Exemple de sortie 1:

Yes
1 1 0 1 1

Exemple d'entrée 2:

121 5

Exemple de sortie 2:

No
4 4 1

Idées

Conversion de base, en jugeant le nombre de palindrome, faites attention au cas particulier de n = 0.

Code


#include <iostream>
#include <vector>
using namespace std;

vector<int>data;
bool Judge(vector<int>data){
    
    
    for (int i=0; i<data.size()/2; i++){
    
    
        if (data[i] != data[data.size()-i-1])   return false;
    }
    return true;
}
int main(){
    
    
    int n,k;
    cin>>n>>k;
    if (n==0) data.push_back(0);  // 注意n=0的特殊情况
    while (n != 0){
    
    
        data.push_back(n%k);
        n = n/k;
    }
    if (Judge(data))    cout << "Yes" <<endl;
    else cout <<"No" << endl;
    cout << data[data.size()-1];
    for (int i=data.size()-2; i>=0; i--)
        cout << " " <<data[i];
    return 0;
}

Je suppose que tu aimes

Origine blog.csdn.net/weixin_42100456/article/details/108960575
conseillé
Classement