概述
405. 数字转换为十六进制数 简单题
给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。
注意:
十六进制中所有字母(a-f)都必须是小写。
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符'0'来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
1.计算机存储数据本身就是16进制形式,所以只需要算int中的每一字节中的每4bit;
2.如何算每4位的值? 1个字节右移4位就该字节前4位的值,左移4位后再右移回去就是低位的值,4位最大0000-1111(0-15),转换成字母即可
3.注意大小端的问题、注意首位0不存入string的问题
代码:
class Solution {
public:
string toHex(int num) {
if(num == 0) return "0";
string s;
char hex_char[16] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
char* p =(char*) #
bool flag_0 = false;
for(int i = (sizeof(int) - 1);i >= 0;i--)
{
//单字节的前4位
unsigned char temp = *(p+i);
temp = temp >> 4;
if(!(flag_0 == false && temp == 0))
{
s.push_back(hex_char[temp]);
flag_0 = true;
}
//单字节的后4位
temp = *(p+i);
temp = temp & 0x0f;
if(!(flag_0 == false && temp == 0))
{
s.push_back(hex_char[temp]);
flag_0 = true;
}
}
return s;
}
};
HJ5 进制转换 :输入16进制字符串 输出10进制
思路:
从字符串的最后一位开始处理 ,判断是0-9 A-F,字符-'0' -'A'
代码:
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int main()
{
string num;
while(cin>>num)
{
int result = 0;
int index = num.length() - 1;//
int bit = 0;
for (index;index > 1;index--,bit++)
{
//判断字符
if(num[index] >= '0' && num[index] <= '9')
{
result =result + (num[index]-'0')*pow(16,bit);
}
else if(num[index] >= 'A' && num[index] <= 'F')
{
result = result + (num[index] -'A' + 10)*pow(16,bit);
}
}
cout<<result<<endl;
}
return 0;
}
最后
以上就是发嗲鸵鸟为你收集整理的【刷题】进制转换 leecode.405(10进制int转16进制字符串) 、 华为机试HJ5(16进制字符串转10进制int)的全部内容,希望文章能够帮你解决【刷题】进制转换 leecode.405(10进制int转16进制字符串) 、 华为机试HJ5(16进制字符串转10进制int)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复