Java中的进制转换
- [十进制 -> R进制](#十进制 -> R进制)
- [R进制 -> 十进制](#R进制 -> 十进制)
- [A进制 -> B 进制](#A进制 -> B 进制)
- [例题1(FROM 洛谷 B3619)](#例题1(FROM 洛谷 B3619))
- [例题2(FROM 洛谷 P2084)](#例题2(FROM 洛谷 P2084))
-
- [join() 函数](#join() 函数)
- 代码实现
- [拓展 ------ split() 函数](#拓展 —— split() 函数)
十进制 -> R进制
- 步骤:(用 while 循环实现)
1.不断用十进制数 N 除以 R
2.记录每次的余数(可以用 StringBuilder,自带翻转函数)
3.N 为 0 时退出循环
4.将结果倒序输出
R进制 -> 十进制
- 步骤 :(按权展开)
1.不断取 R 进制数 M 的最后一位
2.和 Rx 相乘之后累和
3.M 为 0 时退出循环
4.输出累和结果
A进制 -> B 进制
先将 A 进制转十进制,再将十进制转 B 进制
例题1(FROM 洛谷 B3619)
注意是B3619不是P

代码实现
java
import java.util.*;
public class Main{
public static void main(String [] args){
Scanner input = new Scanner (System.in);
int n = input.nextInt();
int x = input.nextInt();
StringBuilder sb = new StringBuilder();
char ss = '0';
while(n > 0){
int s = n % x;
if(s >= 10)
ss = (char) (s-10 + 'A');
else ss = (char)(s+'0');
sb.append(ss);
n /= x;
}
System.out.print(sb.reverse().toString());
}
}
例题2(FROM 洛谷 P2084)

join() 函数
- 传入的参数必须是字符串类型 的,可以是动态字符串数组,也可以直接传字符串,返回一个字符串。比如:
System.out.print(String.join("+",list));或String result = String.join("-", "2026", "04", "02");,但是要注意的是,list数组中不可以有空(NULL)。如果想传入其他类型参数,可以先转为字符串数组,再使用。
代码实现
java
import java.util.*;
public class Main{
public static void main(String [] args){
Scanner input = new Scanner (System.in);
int m = input.nextInt();
String n = input.next();
List<String>list = new ArrayList<>();
for(int i=0;i<n.length();i++){
char s = n.charAt(i);
if(s != '0'){
int index = n.length()-1-i;
list.add((s-'0')+"*"+ m +"^"+index);
}
}
System.out.print(String.join("+",list));
}
}
拓展 ------ split() 函数
这个函数也属于String类,也很有用,想起来就在这讲一下吧。
split() 函数的作用是:将一个字符串按照指定的分隔符(正则表达式)切分成多个子字符串,并返回一个字符串数组。
- 只指定分隔符(正则表达式):
public String[] split(String regex) - 指定分隔符 + 最大分割次数:
public String[] split(String regex, int limit)
其中 regex 是正则表达式,不是普通字符串。. 、*、+、?、|、(、)、[、]、{、} 等在正则中有特殊含义,必须用 \ 转义才能当作普通字符使用。
比如:
java
// 错误 ❌:. 在正则中表示"任意字符"
String ip = "192.168.1.1";
String[] bad = ip.split("."); // 返回空数组!
// 正确 ✅:需要转义
String[] parts = ip.split("\\.");
// 或使用字符类
String[] parts = ip.split("[.]");
// 结果: ["192", "168", "1", "1"]
其中 limit 的值也代表不同意思,了解既可,感觉竞赛用的不是很多。
| limit 值 | 行为 |
|---|---|
| > 0 | 最多分割成 limit 段,保留尾部空字符串 |
| = 0 | 分割所有可能部分,自动去除尾部空字符串(默认行为) |
| < 0 | 分割所有可能部分,保留所有空字符串(包括尾部) |