【华为OJ5】进制转换

来源:互联网 发布:个人导航源码 编辑:程序博客网 时间:2024/06/05 09:26

题目描述

写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )


输入描述:

输入一个十六进制的数值字符串。



输出描述:

输出该数值的十进制字符串。


输入例子:
0xA

输出例子:

10


import java.util.Scanner;public class Main{    public static void  main(String[]  args){        Scanner sc=new Scanner(System.in);        int num=0;        while(sc.hasNext()){            String str=sc.nextLine();            System.out.println(hex16ToDec10(str));        }        sc.close();    }    //0x62A3>>>6*16^3+2*16^2+'A'*16^1+3*16^0    //>>   6*16+2  >>(6*16+2)*16+'A' >>((6*16+2)*16+'A')*16+3    //即每次乘以16进制后令其为一个值,再不断加上下个数乘以16    public static int hex16ToDec10(String str){        //前面有0x,所以要从i=2开始        int result=0;        int BASE=16;        for(int i=2;i<str.length();i++){            //因为指定位的数可能是'A'-'F'或者,要转化为数字以便计算            result=result*BASE+hexToNum(str.charAt(i));        }        return result;    }    //将字符串转化为数字    public static int hexToNum(char ch){        int chNum=0;        if(ch>='0' && ch<='9'){            chNum=ch-'0';        }else if(ch>='A' && ch<='F'){            chNum=ch-'A'+10;        }else{            return 0;//输入无效字符        }        return chNum;    }}


0 0