題目:輸入一個十進制整數N,將它轉換成R進制數輸出。(2<=R<=16, R!=10)html
思路:展轉相除法:ios
這樣咱們就很清楚地知道是N一直在除以2,直至被除數爲0。數組
咱們就將餘數儲存在一個數組裏,到時候再將數組逆序輸出函數
其它進制也同樣,不過是除數改變而已。!!!spa
因此步驟就是:code
1.將餘數儲存在數組裏 2.將數組逆序輸出htm
代碼:blog
/*輸入一個十進制數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; } } } }
相關補充(超詳細的進制轉換知識詳解):http://www.javashuo.com/article/p-xqovwjqk-gs.htmlci