輸入一個十進制整數N,將它轉換成R進制數輸出。(2<=R<=16, R!=10)

題目:輸入一個十進制整數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

相關文章
相關標籤/搜索