从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/*
 * 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
 * 注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
 */
public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		   String s1="";
		   String s2="";
		   long sum=0; //定义long型变量
		   String s = reader.readLine();
		   //char []ArrOld = s.toCharArray();不需要转换
                   s1=s.toUpperCase();//将s中的小写字母转换为大写字母
	
		  /*  int i=0;
		  while(ArrOld[i]!='\0') 	  //java 的字符数组没有结束符!!!!!!!
		   {
			   char []ArrNew = new char[ArrOld.length];
			   ArrNew[i]=(char)(ArrOld[i]-26);
			   System.out.println(ArrNew);
			   s=new String(ArrNew);
			   i++;
		   }*/
		    s2=hexToBinary(s1);
		    
		    for(int i=0;i<s2.length();i++)
		    {
                    /*  System.out.println(s2.charAt(s2.length()-i-1));
		    	System.out.println(PowerTwo(i));  */
                    /*  long k=Integer.valueOf(s2.charAt(s2.length()-i-1));
		    	System.out.println("p:::"+p);
		    	System.out.println("k:::"+k);  */
                    sum+=((s2.charAt(s2.length()-i-1))-48)*PowerTwo(i);//字符串的0只能转换成int型的48
		    }
		    System.out.println(sum);
	}
	 public static long PowerTwo(int i){  //返回long型数据,否则int型可能会越界
		 long n=1;
		 if(i==0)
		 {
			 return 1;
		 }else
		 {
			for(int j=0;j<i;j++)
				n=n*2;
			return n;
		 }
	 } 
                //十六进制转换为二进制算法
     public static String hexToBinary(String hexNum){
	        char[] chs = {'0','1'};
	        String str = new String("0123456789ABCDEF");
	        char[] charArray = hexNum.toCharArray();
	        int pos = charArray.length*4;
	        char[] binaryArray = new char[pos];
	        for (int i = charArray.length - 1; i >=0; i--) {
	            int temp = str.indexOf(charArray[i]);
	            for(int j=0;j<4;j++){
	                binaryArray[--pos] = chs[temp & 1];
	                temp = temp >>> 1;
	            }
	        }
	        return new String(binaryArray);
	    }

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值