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

HDU 2031 進制轉換升級版:處理零、負數、大於10進制

     編輯:關於C++

問題描述

將十進制整數 n 轉換為 m 進制 (2 ≤ m ≤ 16) 表示。需處理:n=0、n<0(負數)、m>10 時用 A-F 表示 10-15。

算法邏輯

  1. 若 n = 0,直接輸出 0。
  2. 若 n > 0,反复除以 m 取餘,餘數存入數組,最後逆序輸出。
  3. 若 n < 0,輸出 -,取絕對值轉為正數處理。
  4. 餘數 ≥ 10 時輸出 'A' + (rem-10)。

代碼實現


#include 
using namespace std;
int main() {
    long long n; int m;
    while (cin >> n >> m) {
        if (n == 0) { cout << "0\n"; continue; }
        if (n < 0) { cout << '-'; n = -n; }
        string ans;
        while (n > 0) {
            int r = n % m;
            ans.push_back(r < 10 ? '0'+r : 'A'+r-10);
            n /= m;
        }
        reverse(ans.begin(), ans.end());
        cout << ans << '\n';
    }
    return 0;
}

關鍵點

  • 用 string + push_back + reverse 替代手動數組,代碼更簡潔安全。
  • long long 防止輸入大整數溢出。
  • 負數處理:先輸出符號,再轉正數統一邏輯。
  • 大進制字母:'A' + (r-10) 覆蓋 10→A, ..., 15→F。

測試用例

nm輸出
020
31161F
-25516-FF
1008144

總結

進制轉換是基礎算法,關鍵在於邊界情況完備:零、負數、大進制字母。現代 C++ 用 string 操作比手動數組更不易出錯。本題考察細節處理能力,代碼簡短但需全面。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved