PTA(上級レベル)1019.General回文数

それは前後に書き込まれたときと同じであろう数はとして知られて回文数たとえば、1234321は回文数です。すべて1桁の数は回文数です。

回文数が最も頻繁に十進法で考慮されていますが、palindromicityの概念は、任意の数字、システム内の自然数に適用することができます。数検討Nベースに> 0 、Bそれと標準表記で書かれ≥2、K * ** iはΣ*として+1桁iは = 0 、KIの BのIを)。ここでは、いつものように、0≤私は < bはすべてのためにと* ** K *はゼロでありません。次いで、Nは、場合にのみ場合、パリンドロームであり、I = K - I全てに対してIゼロは任意のベースに0を書かれても、定義によりパリンドロームです。

任意の正の10進整数を考えるとNとベースBを、あなたはどうかと考えられているNがベースで回文数であるbが

入力仕様:

各入力ファイルには、1つのテストケースが含まれています。各ケースは、2つの正の数で構成されてN及びB、0 < N ≤10910進数であり、2≤ B ≤109は塩基です。数値は、スペースで区切られます。

出力仕様:

各テストケースのために、最初の行で印刷するYes場合、Nは塩基で回文数であり、bは、またはNoそうでない場合。その後、次の行に、印刷Nベースの数値としてB形の「* ** K * ** K -1 ... * 0」。出力の最後に余分なスペースがあってはならないことに注意してください。

サンプル入力1:
27 2
サンプル出力1:
Yes
1 1 0 1 1
サンプル入力2:
121 5
サンプル出力2:
No
4 4 1
考え
  • トピックの効果:計算し、六角下式を回文かどうかを判断しますnb
  • (0裁判官は、実際にも、持っていた特別な書いていませんでした...
コード
#include<bits/stdc++.h>
using namespace std;
vector<int> v;
void get_num(int n, int b)
{
    int t;
    while(n)
    {
        t = n % b;
        v.push_back(t);
        n /= b;
    }
}
int main()
{
    int n,b;
    cin >> n >> b;

    get_num(n,b);
    reverse(v.begin(), v.end());
    bool same = true;
    for(int i=0;i<v.size()/2;i++)
        if(v[i] != v[v.size() - 1 - i])
            same = false;
    if(same)
        cout << "Yes\n";
    else cout << "No\n";
    cout << v[0];
    for(int i=1;i<v.size();i++)
         cout << " " << v[i];
    return 0;
}

引用文

https://pintia.cn/problem-sets/994805342720868352/problems/994805487143337984

おすすめ

転載: www.cnblogs.com/MartinLwx/p/11672168.html