一.代码功能:输入一个十进制整数,将其转化为十六进制整数并输出
二.源码
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
// 十进制数转化为十六进制数步骤如下:
// step1 创建一个整型变量dec,用于接收十进制整数
// step2 创建一个字符串类型变量hex,用于接收转化后的十六进制数
// step3 创建一个余数数组reminder用于接收除16产生的余数
// step4 创建一个整型变量count并初始化为0,用于记录余数个数
// step5 输入dec,若dec<0,取该数绝对值,同时hex+='-',然后进行第6步;若dec为0,0即为最终答案;
若dec>0,直接进行第6步
// step6 当dec!=0,reminder[i]=dec%16,dec/=16,同时余数数组下标i加1,此时若dec>0,count也加1
(这步就是在初始化余数数组)
// step7 遍历余数数组的前count位,将余数数组中的每个数字转化为字符串,并用字符串数组str接收,同
时hex+=str[i](即进行字符串拼接)
// step8 输出hex
int main() {
int dec = 0; // 十进制数
string hex; // 十六进制数,用字符串类型接收,方便后续通过+运算符进行拼接
int reminder[100]; // 余数数组
int count = 0; // 记录余数个数
int i = 0; // 余数数组下标
// 输入十进制数
cout << "请输入一个十进制整数:";
cin >> dec;
if(dec<0){
dec = abs(dec);
hex += "-";
}
else if(dec==0){
cout<<"转为十六进制为:"<<0<<endl;
exit(0);
}
// 初始化余数数组
while (dec != 0) {
reminder[i] = dec % 16;
dec /= 16;
i++;
if(dec>0){
count++;
}
}
string str[100];
for (int i = count; i >= 0; i--) {
if (reminder[i] >= 10) {
switch (reminder[i]) {
case 10:
str[i] = "A";
break;
case 11:
str[i] = "B";
break;
case 12:
str[i] = "C";
break;
case 13:
str[i] = "D";
break;
case 14:
str[i] = "E";
break;
case 15:
str[i] = "F";
break;
}
}
else if (reminder[i] < 10) {
str[i] = to_string(reminder[i]);
}
hex += str[i];
}
cout<<"转为十六进制为:"<<hex<<endl;
return 0;
}
三.注意事项
1.余数数组的长度可以事先指定一个较大的值,反正后面遍历前count位就行;
2.余数数组的遍历就是常见的for循环,但要注意不能写成:for(int i=0;i<count;i++),因为事实上这 里的余数数组是一个栈,要保证后进的先出,所以要写成for(int i=count;i>=0;i--);
3.字符串数组str初始化时写成string str[count]编译器会报错,所以str的长度也可以事先指定一个 较大的值,反正只需要操作其前count位;
4.输入的数记得判断是正/负/0(0直接输出即可),若为负数划归到正数(取绝对值)进行操作;
5.初始化余数数组时,记得判断dec/=16后是否还为正,若为正count才++,否则输出小于16的 十进制数的转化结果时前面会多一个0,例如12->0C;
6.采用字符串类(string)的原因就是它里面有非常多好用的内置函数(例如本题中用到的to_string)以及拼接方便。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)