首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

1019 General Palindromic Number:任意進制回文數判斷與轉換

     編輯:關於C++

題目大意

給定十進制非負整數 N(≤10⁹)與進制 b(2~10⁹),判斷 N 的 b 進制表示是否為回文。輸出 Yes/No 及 b 進制數字(空格分隔,高位在前)。

轉換與判斷

  1. 反覆取模 b 得到低位數字,存入向量(低位在前)。
  2. 檢查向量是否對稱:v[i] == v[len-1-i]。
  3. 輸出時反向遍歷向量,數字間加空格,行末無多餘空格。

代碼實現

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false); cin.tie(0);
    long long N, b; cin >> N >> b;
    vector digits;
    if (N == 0) digits.push_back(0);
    else {
        while (N) { digits.push_back(N % b); N /= b; }
    }
    bool ok = true;
    for (int i = 0, j = digits.size()-1; i < j; ++i, --j)
        if (digits[i] != digits[j]) { ok = false; break; }
    cout << (ok ? "Yes" : "No") << '\n';
    for (int i = digits.size()-1; i >= 0; --i) {
        if (i != digits.size()-1) cout << ' ';
        cout << digits[i];
    }
    cout << '\n';
    return 0;
}

複雜度

  • 時間:O(log_b N) ≤ 31 次迴圈(b=2 時最長)。
  • 空間:O(log_b N)。

範例

N=27, b=2 → 11011 → Yes
N=121, b=10 → 121 → Yes
N=123, b=10 → 123 → No

注意

  • N=0 特判,其任意進制表示為 0,是回文。
  • b 可大於 10,輸出數字直接用十進制數字表示(如 15 進制中 10 輸出 10),不需字母。
  • 輸出格式嚴格:行末無空格。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved