Java中的进制转换

Java中的进制转换

  • [十进制 -> R进制](#十进制 -> R进制)
  • [R进制 -> 十进制](#R进制 -> 十进制)
  • [A进制 -> B 进制](#A进制 -> B 进制)
  • [例题1(FROM 洛谷 B3619)](#例题1(FROM 洛谷 B3619))
  • [例题2(FROM 洛谷 P2084)](#例题2(FROM 洛谷 P2084))
  • [拓展 ------ 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() 函数的作用是:将一个字符串按照指定的分隔符(正则表达式)切分成多个子字符串,并返回一个字符串数组。

  1. 只指定分隔符(正则表达式):public String[] split(String regex)
  2. 指定分隔符 + 最大分割次数: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 分割所有可能部分,保留所有空字符串(包括尾部)
相关推荐
折哥的程序人生 · 物流技术专研1 分钟前
Java 23 种设计模式:从踩坑到精通 | 原型模式 —— 克隆对象,深拷贝与浅拷贝的坑你踩过吗?
java·设计模式·架构·原型模式·单一职责原则
装不满的克莱因瓶14 分钟前
基于 OpenResty 扩展开发实现动态服务注册与发现能力
java·开发语言·架构·openresty
程序员小羊!20 分钟前
06Java 异常机制与常用类
java
weixin_523185321 小时前
Java基础知识总结(四):引用数据类型与参数传递机制
java·开发语言·python
Nayxxu1 小时前
Claude API 生产稳定性设计:超时、降级、备用模型和告警怎么做
开发语言·php
王cb1 小时前
WinRT Server and Client c#
开发语言·c#
Selina K1 小时前
C中日历时间转换
c语言·开发语言
怪我冷i1 小时前
zig语言学习笔记——heap-memory
开发语言·golang·zig
宸津-代码粉碎机1 小时前
Spring AI企业级实战|从RAG优化到Agent多工具调度
java·大数据·人工智能·后端·python·spring
噢,我明白了2 小时前
QueryWrapper的使用
java