[編程題] 進制轉換(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:
        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));
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM