因为进制问题在蓝桥杯中几乎是必考的题目
所以此文为进制转换问题专项篇,带你快速解决所有进制转换问题。
本文不仅包含了快速进行进制转换的方法,结合经典的例题带你秒破进制转换类题型
目标冲击蓝桥杯省一国一,团体程序天梯赛个人国三、XCPC区域赛铜/银奖
目录
快速进制转换方法
实战题目
一、利用数字类进行固定进制转换
下面展示的是Integer也就是int类型的用法。Long类用法跟Integer一样,Double只能使用toHexString(10进制转16进制)
缺点:只能进行几个固定的进制转换
java
Scanner sc=new Scanner(System.in);
int a=15;
System.out.println(Integer.toBinaryString(a));//10进制转2进制
System.out.println(Integer.toHexString(a));//10进制转16进制
System.out.println(Integer.toOctalString(a));//10进制转8进制

运行结果
二、数字类实现任意进制随意转换
利用Integer.parseInt(需要转换的字符串 ,字符串的进制);//将任意进制转化成10进制
和Integer.toString(第一个参数是需要转换的数,第二个参数是进制)
可以实现任意进制的转换,输出的结果是字符串类型
下面就是将10进制的15转化为8进制
示例说明
java
System.out.println(Integer.toString(15,8));//将15转化为8进制
System.out.println(Integer.toString(15,2));//将15转化为2进制
String binary = "101101"; // 二进制字符串
int decimal = Integer.parseInt(binary 2); // 二进制转化十进制
进制转换示例(2进制转9进制),使用这个模板可实现任意进制对任意进制的转换
java
String binary = "101101"; // 二进制字符串
int decimal = Integer.parseInt(binary, 2); // 先将二进制转为十进制
String nonary = Integer.toString(decimal, 9); // 再将十进制转换为九进制
System.out.println("二进制数 " + binary + " 转换为九进制数为 " + nonary);
三、实战
3.1任意进制转换
题目描述
给定一个 N 进制数 S,请你将它转换为 M 进制。
输入描述
第一行为一个整数 T,表示测试数据数量。 (1≤T≤105)
每个测试用例包含两行,第一行包含两个整数 N,M。
第二行输入一个字符串 S,表示 N 进制数。
数据范围保证:2≤N,M≤16,若 N≥10N≥10,则用 A∼F 表示字码 10∼15。保证 S 对应的十进制数的位数不超过 10。
输出描述
输出共 T 行,每行表示一组数据的答案。
输入样例
2
2 10
10101
11 2
1793A5068
输出样例
21
10101111001010100111010101011
java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int t=scan.nextInt();
while(t-->0){
int n=scan.nextInt();
int m=scan.nextInt();
String s= scan.next();
int tmp=Integer.parseInt(s,n);//先将n进制的s转化为10进制
String ans=Integer.toString(tmp,m);//再将tmp的结果转化为m进制
System.out.println(ans.toUpperCase());
}
scan.close();
}
}
3.2二进制表示
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明要用二进制来表示 11 到 1000010000 的所有整数,要求不同的整数用不同的二进制数表示,请问,为了表示 11 到 1000010000 的所有整数,至少需要多少个二进制位?
java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print(Integer.toString(10000,2).length());
scan.close();
}
}
3.3进制位数
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
问题描述
十进制整数 22 在十进制中是 11 位数,在二进制中对应 1010 ,是 22 位数。
十进制整数 2222 在十进制中是 22 位数,在二进制中对应 1011010110 ,是 55 位数。
请问十进制整数 20222022 在二进制中是几位数?
java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println(Integer.toString(2022,2).length());
scan.close();
}
}
3.4进制
问题描述
请问十六进制数 2021ABCD 对应的十进制是多少?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println(Integer.parseInt("2021ABCD",16));
scan.close();
}
}
3.5rgb颜色转十六进制颜色
问题描述
小布最近在学设计,需要用到很多设计软件。但是小布发现有有些软件使用 rgb 三原色来表示颜色,而有些软件使用十六进制来表示颜色,于是小布决定请你来帮他设计一个程序来实现 rgb 颜色到十六进制颜色的转换。
注:rgb 颜色 [red、green、blue]这里red,green,blue 都是十进制数,只要把它们分别转换成十六进制数并且保留两位,然后再按顺序组合在一起并在头部添加"#"就得到了十六进制的颜色值。
例如:有一个 rgb 颜色 [25,78,90];25 ,78 ,90 的十六进制分别表示为 19 , 4E , 5A ,故该颜色的十六进制表示为 #194E5A。
输入格式
输入共 1 行,包含三个正整数 r,g,b 表示颜色的 rgb 表示法,使用空格分隔。
输出格式
输出共 1 行,包含一个字符串,表示颜色的十六进制表示法。
样例输入
25 78 90
样例输出
#194E5A
评测数据规模
对于所有评测数据,0≤r,g,b≤255。
java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//注意补0,不然无法ac
int r = scan.nextInt();
int g = scan.nextInt();
int b = scan.nextInt();
String ans="#";
String tmp=Integer.toHexString(r).toUpperCase();
ans+=tmp.length()<2?0+tmp:tmp;
tmp=Integer.toHexString(g).toUpperCase();
ans+=tmp.length()<2?0+tmp:tmp;
tmp=Integer.toHexString(b).toUpperCase();
ans+=tmp.length()<2?0+tmp:tmp;
System.out.println(ans);
}
}