zoukankan      html  css  js  c++  java
  • [编程题] 进制转换(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
    ",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));
            }
        }
    }
    
  • 相关阅读:
    关于点击率模型,你知道这三点就够了
    【AI】Computing Machinery and Intelligence
    MATLAB 的函数句柄
    MATLAB 的unique函数——数组矩阵的唯一值
    MATLAB 的数据导入与导出
    MATLAB 的函数
    MATLAB 向量
    MATLAB 的break语句和continue语句
    MATLAB 的循环语句
    MATLAB 的条件分支语句
  • 原文地址:https://www.cnblogs.com/oucbl/p/12423050.html
Copyright © 2011-2022 走看看