將十進制整數 n 轉換為 m 進制(2 ≤ |m| ≤ 16?題目通常 m 為正,但代碼處理了符號)。輸出用 0-9, A-F 表示。多測試用例。
temp = n % m; temp = temp>0 ? temp : -temp; 確保餘數非負。'A' + temp - 10。#include <iostream> #include <stack> using namespace std; int main() { int n, m; stack<char> st; while (cin >> n >> m) { int temp; if ((n < 0 && m > 0) || (n > 0 && m < 0)) cout << "-"; while (n) { temp = n % m; temp = temp > 0 ? temp : -temp; if (temp >= 10) st.push(temp - 10 + 'A'); else st.push(temp + '0'); n /= m; } while (!st.empty()) { cout << st.top(); st.pop(); } cout << endl; } return 0; }
-7 % 3 == -1,需手動修正為非負餘數(+m 或取絕對值)。代碼用 temp>0?temp:-temp 實現。'A' + temp - 10 生成 'A'..'F'。| n | m | 輸出 | 說明 |
|---|---|---|---|
| 31 | 16 | 1F | 標準十六進制 |
| -31 | 16 | -1F | 負數輸出負號 |
| 31 | -16 | -1F | 基數負數視為結果為負 |
| 0 | 2 | (空行?) | 代碼 while(n) 不進入,輸出空行;題目通常 n≠0 |
0。stack,減少 STL 開銷。