將十進制整數 n 轉換為 m 進制 (2 ≤ m ≤ 16) 表示。需處理:n=0、n<0(負數)、m>10 時用 A-F 表示 10-15。
0。-,取絕對值轉為正數處理。'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。| n | m | 輸出 |
|---|---|---|
| 0 | 2 | 0 |
| 31 | 16 | 1F |
| -255 | 16 | -FF |
| 100 | 8 | 144 |
進制轉換是基礎算法,關鍵在於邊界情況完備:零、負數、大進制字母。現代 C++ 用 string 操作比手動數組更不易出錯。本題考察細節處理能力,代碼簡短但需全面。