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
提示
先将十六进制数转换成某进制数,再由某进制数转换成八进制。