当前位置:   article > 正文

【蓝桥杯】基础练习 十六进制转十进制(Java实现)_java 十六进制的字符串转换成十进制long型

java 十六进制的字符串转换成十进制long型

在这里插入图片描述
分析:

方法一,十六进制转换成十进制的基本原理是按数位依次操作,将每一位依次展开乘以权值再求和。

方法二,由于Java中没有格式化输入,只能把给定的十六进制数读取当做一个字符串读取到一个字符串变量中,然后通过Java中自带的进制转换函数将读取的十六进制数转换成十进制数输出。
使用Java特性的的Long.valueOf(String s, int radix) 方法,注意这块需要Long,因为Int的范围已经不够了。API文档中该方法的解释如下:在这里插入图片描述
总结:当字符串变量s为一串r进制数字序列时,可以利用Integer.valueOf(s,r)函数将其转换为十进制int型整数,利用Long.valueOf(s,r)函数将其转换为十进制long型整数。

方法三,后面发现Long.parseLong(String s, int radix) 方法也是可以的。
在这里插入图片描述

Java代码实现:

方法一:

import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Scanner scanner = new Scanner(System.in);
    		String string = scanner.nextLine();
    		char c[]=string.toCharArray();    //将字符串对象中的字符转换为一个字符数组
    		//int sum = 0;						
    		long sum = 0;	//数据范围上,不超过8位的十六进制数,所以计算总和的sum应该声明为long型,而不是int型,否则会出错。
    		int n = c.length;
    		for (int i = 0; i < n; i++) {
    			 if((int)c[i]-48>9){
                     if(c[i]=='A')
                         sum+=10*Math.pow(16,n-i-1);
                     else if(c[i]=='B')
                         sum+=11*Math.pow(16,n-i-1);
                     else if(c[i]=='C')
                         sum+=12*Math.pow(16,n-i-1);
                     else if(c[i]=='D')
                         sum+=13*Math.pow(16,n-i-1);
                     else if(c[i]=='E')
                         sum+=14*Math.pow(16,n-i-1);
                     else if(c[i]=='F')
                         sum+=15*Math.pow(16,n-i-1);
                 }
                 else{
                     sum+=((int)c[i]-48)*Math.pow(16,n-i-1);
                 }
    		}
    		System.out.println(sum);
    	}
    
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

本题需要注意的地方是sum应该声明为long型,而不是int型,否则会出错。数据范围上,不超过8位的十六进制数,转换之后超出了int型的取值范围了。(int表示有符号数为-2147483648到2147483647,FFFFFFFF会超了)
在这里插入图片描述方法二:

import java.util.Scanner;    
public class Main {
		public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String string = scanner.nextLine();
	    System.out.print(Long.valueOf(string,16));
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

方法三:

import java.util.Scanner;    
public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String string = scanner.nextLine();
		System.out.print(Long.parseLong(string, 16));
	}    	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/226712
推荐阅读
相关标签
  

闽ICP备14008679号