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 分割所有可能部分,保留所有空字符串(包括尾部)
相关推荐
2301_789015622 小时前
C++11新增特性:列表初始化&左值引用&右值引用&万能引用&移动构造&移动赋值&引用折叠&完美转发
c语言·开发语言·c++·c++11
lsx2024063 小时前
jQuery 删除元素
开发语言
2601_949816227 小时前
Redis 配置日志
java
遇见你...8 小时前
A01-Spring概述
java·后端·spring
紫金修道10 小时前
【DeepAgent】概述
开发语言·数据库·python
Via_Neo10 小时前
JAVA中以2为底的对数表示方式
java·开发语言
书到用时方恨少!10 小时前
Python multiprocessing 使用指南:突破 GIL 束缚的并行计算利器
开发语言·python·并行·多进程
cch891810 小时前
PHP五大后台框架横向对比
开发语言·php
天真萌泪11 小时前
JS逆向自用
开发语言·javascript·ecmascript