題目:輸入一個十進制整數N,將它轉換成R進制數輸出。(2<=R<=16, R!=10)
思路:輾轉相除法:
這樣我們就很清楚地知道是N一直在除以2,直至被除數為0。
我們就將余數儲存在一個數組里,到時候再將數組逆序輸出
其它進制也一樣,不過是除數改變而已。!!!
所以步驟就是:
1.將余數儲存在數組里 2.將數組逆序輸出
代碼:
/*輸入一個十進制數N,將它轉換成R進制數輸出。R(2<=R<=16, R!=10) */ #include<iostream> #include<cmath> using namespace std; int main() { int n, r;//n為數,r為進制 int a[10000]; char b[10000]; while (cin >> n >> r)//循環輸入樣例 { if (n == 0) break; if (r < 2 || r>16) { cout << "INPUT ERROR!"; break; } int t = 0, i = 0; int k = abs(n);//先用abs函數求出絕對值 //進制小於10 if (r < 10) { while (k != 0)//輾轉相除法 { t = k % r; a[i] = t; i++; k = k / r; } if (n > 0)//若n為正數 { for (int j = i - 1;j >= 0;j--)//倒序輸出 { cout << a[j]; }
cout << endl; } if (n < 0)//n為負 { a[i - 1] = a[i - 1] * (-1); for (int j = i - 1;j >= 0;j--) { cout << a[j]; } cout << endl; } } //進制大於10 if (r > 10) { while (k != 0) { t = k % r; if (t > 9) { if (t == 10) b[i] = 'A'; if (t == 11) b[i] = 'B'; if (t == 12) b[i] = 'C'; if (t == 13) b[i] = 'D'; if (t == 14) b[i] = 'E'; if (t == 15) b[i] = 'F'; } else { b[i] = t + 48;//數組b為字符數組,且0的ASCII碼是48,要將b字符轉化為0 - 9,所以加了48 } i++; k = k / r; } if (n > 0) { for (int j = i - 1;j >= 0;j--) { cout << b[j]; } cout << endl; } if (n < 0) { cout << "-"; for (int j = i - 1;j >= 0;j--) { cout << b[j]; } cout << endl; } } } }
相關補充(超詳細的進制轉換知識詳解):https://www.cnblogs.com/sqm724/p/12694754.html