概述
[编程题] 进制转换
3/3 [编程题] 进制转换
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32M,其他语言64M
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。(多组同时输入 )
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。
输入例子1:
0xA
输出例子1:
10
个人方法
16进制 --> 10进制 思路: 比如:0x209
去掉 “ox”就剩下 209 (三位数:个-9、十-0、百-2)
10进制数 = 2 × 16^2 + 0 × 16^1 + 9 × 16^0 = 521
python :
# !/usr/bin/env python2
# -*- coding:utf-8 -*-
'''
Created on 2020年03月04日
@author: oucbl
'''
# # 10进制转16进制
# def dec2hex(dnum):
# hexNum = [] # 16进制字符串(逆序/栈)
#
# while dnum >= 0:
# mod16 = dnum % 16
# hexNum.append(str(HEX16[mod16]))
# dnum /= 16
#
# if dnum == 0 :
# break
#
# hexNum = '0x' + ''.join([c for c in hexNum[::-1]])
# return hexNum
# 16进制转10进制
def hex2dec(hnum):
decnum = 0 # 10进制数
hnum = hnum[2:] # 去掉前2位标识符
lenth = len(hnum) # 16进制数的长度
for i in range(lenth):
bNum = lenth - i -1 # 位数
weight = 16 ** bNum # 权值
bValue = HEX16.index(hnum[i]) # 位值
decnum += weight * bValue
return decnum
if __name__ == '__main__':
HEX16 = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F'] # 十六进制 与 十进制 对照表
try:
while True:
N = raw_input() # python2接收 非数字 字符
if str(N) == '' :
break
print hex2dec(N) # 16进制转10进制
except:
pass
c++:
/*************************************************
Author: oucbl
Date: 2020.03.05
**************************************************/
#include
#include
using namespace std;
int charIndex(char c) // 查找数组元素位置
{
string HEX16 = "0123456789ABCDEF"; // 十六进制 与 十进制 对照表
int idx = 0; // 元素位置
for(int j=0; j < 16; j++)
{
if(c == HEX16[j])
{
idx = j;
break;
}
}
return idx;
}
long hex2dec(string hex_str) // 16进制转10进制
{
long decnum = 0; // 10进制数
int len = hex_str.length(); // (16进制)字符数组长度
for(int j=2; j < len; j++) // 从第2个元素 开始 遍历
{
int bNum = len - j -1; // 位数
long weight = pow(16, bNum); // 权值
int bValue = charIndex(hex_str[j]); // 位值
decnum += weight * bValue;
}
return decnum;
}
int main()
{
string hex;
// cin获取整行,空行结束循环
while(getline(cin, hex))
{
if(hex.length() == 0)
break;
cout<
}
return 0;
}
优秀解析
1. 内置转换(python)
while True:
try:
print(int(input(),16))
except:
break
2. 内置转换(c++)
#include
using namespace std;
int main()
{
int a;
while ((cin >> hex >> a)){
cout << a << endl;
}
return 0;
}
/*
* C++输出16进制是cout << hex << a;
* 8进制是cout << oct << a;
*/
3. 内置转换(c)
#include
int main() {
int a;
while(scanf("%x",&a) != EOF)
printf("%dn",a);
return 0;
}
4. 内置转换(java)
/*
直接调用Java的decode方法.
该方法的作用是将 String 解码为 Integer。接受十进制、十六进制和八进制数字。
根据要解码的 String(mn)的形式转成不同进制的数字。 mn由三部分组成:符号、基数说明符和字符序列。 -0X123中-是符号位,0X是基数说明符(0表示八进制,0x,0X,#表示十六进制,什么都不写则表示十进制),123是数字字符序列。
*/
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception{
Scanner sc=new Scanner(System.in);
while (sc.hasNext()){
String str=sc.next();
System.out.println(Integer.decode(str));
}
}
}
最后
以上就是鲤鱼夏天为你收集整理的linux c int16进制转10进制,[编程题] 进制转换(16进制转10进制)的全部内容,希望文章能够帮你解决linux c int16进制转10进制,[编程题] 进制转换(16进制转10进制)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复