十进制整数转为十六进制整数(C++实现)

一.代码功能:输入一个十进制整数,将其转化为十六进制整数并输出

二.源码

#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)以及拼接方便。

  • 11
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值