输入一个十进制整数N,将它转换成R进制数输出。(2<=R<=16, R!=10)

题目:输入一个十进制整数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

posted @ 2020-04-13 22:38  明明724  阅读(3094)  评论(0编辑  收藏  举报