[編程題] 進制轉換
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 <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:
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 str=sc.next();
System.out.println(Integer.decode(str));
}
}
}