[编程题]进制转换(16进制转10进制)[编程题] 进制转换
3/3 [编程题] 进制转换
时间限制:C/C++ 1秒,其他语⾔2秒
空间限制:C/C++ 32M,其他语⾔64M
写出⼀个程序,接受⼀个⼗六进制的数,输出该数值的⼗进制表⽰。(多组同时输⼊)
输⼊描述:
输⼊⼀个⼗六进制的数值字符串。
输出描述:
输出该数值的⼗进制字符串。
输⼊例⼦1:
0xA
输出例⼦1:
10
个⼈⽅法
16进制 --> 10进制思路:⽐如:0x209
1. 去掉“ox”就剩下209(三位数:个-9、⼗-0、百-2)
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 <iostream>
#include <cmath>
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<<hex2dec(hex)<<endl;
}
return 0;
}
优秀解析
1. 内置转换(python)
while True:
try:
print(int(input(),16))
except:
16进制字符串转16进制数组break
2. 内置转换(c++)
#include <iostream>
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 <stdio.h>
int main() {
int a;
while(scanf("%x",&a) != EOF)
printf("%d\n",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 ();
System.out.println(Integer.decode(str));
}
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。