进制转换

7-12 进制转换

思路:

  • 给一个int型变量赋予16进制的值时,系统默认以10进制存放。
  • 也就是说,我们不用考虑16转10这个过程
  • 现在考虑的是如何把10进制转8进制

10进制转8进制 方法:

除8取余法,即每次将整数部分除以8,余数为该位权上的数,而商继续除以8,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数起,一直到最前面的一个余数。

  例:将十进制的(796)D转换为八进制的步骤如下:

1. 将商796除以8,商99余数为4;

2. 将商99除以8,商12余数为3;

3. 将商12除以8,商1余数为4;

4. 将商1除以8,商0余数为1;

5. 读数,因为最后一位是经过多次除以8才得到的,因此它是最高位,读数字从最后的余数向前读,1434,即(796)D=(1434)O。

只需要把上面方法转化成代码即可

代码如下

#include<iostream>
#include<math.h>
using namespace std;

int main() {
    int n, a[10], temp=0;   
    cin >> n;

    for (int j = 0; j < n; j++,temp=0) {
        cin >> hex >> a[j];
        ////下面if的第j个数是否>=8 ,‘是’则进行转换成8进制
        if (a[j] >= 8) {
            for (int i = 0; a[j] >= 8; i++) {
                temp = temp + (a[j] % 8) * pow(10, i);
                a[j] = a[j] / 8;
                if (a[j] == 8){
                    temp = temp + 10 * pow(10, i + 1);
                    a[j]--;
                }
                else if (a[j] < 8)
                    temp = temp + a[j] * pow(10, i + 1);
            }
            a[j] = temp;
        }
    }

    for (int i = 0; i < n; i++)
        cout << a[i] << endl;

    return 0;
}

测试结果

进制转换

进制转换

题目:

问题描述
给定 n 个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数 n (1<=n<=10)。
接下来 n 行,每行一个由 0~9、大写字母 A~F 组成的字符串,表示要转换的十六进制正
整数,每个十六进制数长度不超过 100000。
输出格式
输出 n 行,每行为输入对应的八进制正整数。
注意
输入的十六进制数不会有前导 0,比如 012A。
输出的八进制数也不能有前导 0。
样例输入
2
39
123ABC
样例输出
71
4435274
提示
先将十六进制数转换成某进制数,再由某进制数转换成八进制。

进制转换

上一篇:cf622f The Sum of the k-th Powers


下一篇:selenium-使用xpath结合text内容定位li元素