java实现二进制转十六进制
題目鏈接:
百練OJ:2798
描述:輸入一個(gè)2進(jìn)制的數(shù),要求輸出該2進(jìn)制數(shù)的16進(jìn)制表示。在16進(jìn)制的表示中,A-F表示10-15
輸入:第1行是測(cè)試數(shù)據(jù)的組數(shù)n,后面跟著n行輸入。每組測(cè)試數(shù)據(jù)占1行,包括一個(gè)以0和1組成的字符串,字符串長(zhǎng)度至少是1,至多是10000
輸出:n行,每行輸出對(duì)應(yīng)一個(gè)輸入。
對(duì)于一個(gè)值比較小的二進(jìn)制數(shù)轉(zhuǎn)化為十六進(jìn)制的數(shù)可以在java中直接調(diào)用函數(shù)解決,代碼如下:
解題代碼一:
import java.util.Scanner;public class Main{public static void main(String[] args) {Scanner input =new Scanner(System.in);int n=input.nextInt();while(n>0){int k=input.nextInt();int tem=Integer.parseInt(String.valueOf(k), 2);String str=Integer.toHexString(tem).toUpperCase();System.out.println(str);n--;}input.close();}
}
但是,本題的輸入二進(jìn)制的位數(shù)很多,字符長(zhǎng)度可達(dá)10000,超出了int型數(shù)的限制,于是,解題應(yīng)更加復(fù)雜。
對(duì)于一個(gè)二進(jìn)制的數(shù)每四位數(shù)可以轉(zhuǎn)化為一個(gè)十六進(jìn)制數(shù),例如1111可轉(zhuǎn)化為F; 0001轉(zhuǎn)化為1 ;1000轉(zhuǎn)化為8;11101010轉(zhuǎn)化為EA。對(duì)于一個(gè)二進(jìn)制的數(shù)位數(shù)若不是4的倍數(shù),可以在前面補(bǔ)零,補(bǔ)成4的倍數(shù)位。例如:1111011111補(bǔ)為為001111011111轉(zhuǎn)化為十六進(jìn)制:3DF
解題代碼二:
import java.util.Scanner;public class Main{public static void main(String[] args) {Scanner input =new Scanner(System.in);int n=input.nextInt();while(n>0){String k=input.next();System.out.println(turn2to16(k));n--;}input.close();}private static String turn2to16(String str) {String sum="";int t=str.length()%4;if(t!=0){for(int i=str.length();i-4>=0;i=i-4){String s=str.substring(i-4,i);int tem=Integer.parseInt(String.valueOf(s), 2);sum=Integer.toHexString(tem).toUpperCase()+sum;}String st=str.substring(0,t);int tem=Integer.parseInt(String.valueOf(st), 2);sum=Integer.toHexString(tem).toUpperCase()+sum;}else{for(int i=str.length();i-4>=-1;i=i-4){String s=str.substring(i-4,i);int tem=Integer.parseInt(String.valueOf(s), 2);sum=Integer.toHexString(tem).toUpperCase()+sum;}}return sum;}}
總結(jié)
以上是生活随笔為你收集整理的java实现二进制转十六进制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java函数实现进制转换与java实现八
- 下一篇: 百练OJ:2742:统计字符数