进制转换

R进制转换为十进制:二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……

                           0110 0100 换算成十进制:0 * 20 + 0 * 21 + 1 * 22 + 0 * 23 + 0 * 24 + 1 * 25 + 1* 26 + 0 * 27 = 100

                          八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方……

                         1507换算成十进制:7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839

代码:

int change(char s[],int d)
{
    int len=strlen(s);
    int sum=0;
    int x=1;
    for(int i=len-1;i>=0;i--)
    {
        int ss;
        if(isalpha(s[i]))
        {
            ss=(s[i]-'a'+10);
        }
        else 
        {
            ss=(s[i]-'0');
        }
        sum+=ss*x;
        x=x*d;
    }
    return sum;
}

 

十进制转换为R进制:对于整数部分,用被除数反复除以2,除第一次外,每次除以2均取前一次商的整数部分作被除数并依次记下每次的余数。另外,所得到的商的最后一位余数是所求二进制数的最高位。

#include<iostream>
using namespace std;
int main()
{
    long long n;
    int r, i, m, j;
    int a[1000];
    while (cin >> n >> r)
    {
        i = 0;
        if (n < 0)
        {
            n = -n;
            cout << "-";
        }
        if (n == 0)
        {
            cout << 0;
        }
        while (n>0)
        {
            m = n%r;
            a[i++] = m;
            n = n / r;
        }
        i = i - 1;
        for (j = i; j >= 0; j--)
        {
            switch (a[j])
            {
            case 10:cout << "A"; break;
            case 11:cout << "B"; break;
            case 12:cout << "C"; break;
            case 13:cout << "D"; break;
            case 14:cout << "E"; break;
            case 15:cout << "F"; break;
            default:cout << a[j];
            }
        }
        cout << endl;
    }
    return 0;
}

 

posted @ 2016-10-27 20:56  web之路  阅读(189)  评论(0)    收藏  举报