P8723 [蓝桥杯 2020 省 AB3] 乘法表——Java解答

P8723 蓝桥杯 2020 省 AB3 乘法表

题目描述

九九乘法表是学习乘法时必须要掌握的。在不同进制数下,需要不同的乘法表。

例如, 四进制下的乘法表如下所示:

复制代码
1*1=1
2*1=2 2*2=10
3*1=3 3*2=12 3*3=21

请注意,乘法表中两个数相乘的顺序必须为样例中所示的顺序,不能随意交换两个乘数。

给定 P P P,请输出 P P P 进制下的乘法表。

输入格式

输入一个整数 P P P。

输出格式

输出 P P P 进制下的乘法表。 P P P 进制中大于等于 10 10 10 的数字用大写字母 ABC、 ⋯ \cdots ⋯ 表示。

输入输出样例 #1

输入 #1

复制代码
4

输出 #1

复制代码
1*1=1
2*1=2 2*2=10
3*1=3 3*2=12 3*3=21

输入输出样例 #2

输入 #2

复制代码
8

输出 #2

复制代码
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=11
4*1=4 4*2=10 4*3=14 4*4=20
5*1=5 5*2=12 5*3=17 5*4=24 5*5=31
6*1=6 6*2=14 6*3=22 6*4=30 6*5=36 6*6=44
7*1=7 7*2=16 7*3=25 7*4=34 7*5=43 7*6=52 7*7=61

说明/提示

对于所有评测数据, 2 ≤ P ≤ 36 2 \leq P \leq 36 2≤P≤36。

蓝桥杯 2020 第三轮省赛 AB 组 G 题。
洛谷链接

一、知识点

1.字符与数字的映射关系

在 Java 中,char 类型本质上是一个 16 位的 Unicode 字符,但我们可以利用 ASCII 编码中字符的连续性来快速实现数字到字符的转换。

下面我给出数字和字母的ASCII 编码表,我们只需要就记住首个码位就行

字符 码位
0 48
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
A 65
B 66
C 67
D 68
E 69
F 70
G 71
H 72
I 73
J 74
K 75
L 76
M 77
N 78
O 79
P 80
Q 81
R 82
S 83
T 84
U 85
V 86
W 87
X 88
Y 89
Z 90

数字 → 字符(0~9)

java 复制代码
int num = 7;
char c = (char)('0' + num);  // '7'

数字 → 字母(10~35)

java 复制代码
int num = 12;
char c = (char)('A' + (num - 10));  // 'C'

2. 进制转换的核心:除基取余法 + 字符映射

我们以将十进制数 n 转换为 P 进制字符串为例,步骤如下:

不断除以 P,取余数;

将余数映射为字符;

拼接字符; 逆序得到结果。

java 复制代码
//将 123 转换为 16 进制
123 ÷ 16 = 7            余 11 → 'B'
7 ÷ 16 = 0              余 7 → '7'
结果:"7B"

3.StringBuilder 的使用

由于进制转换是从低位到高位计算的,我们需要逆序拼接字符,这时用 StringBuilder 的 reverse() 方法非常方便。

java 复制代码
StringBuilder sb = new StringBuilder();
sb.append('A');
sb.append('1');
System.out.println(sb.reverse().toString());  // 输出 "1A"

二、思路讲解及代码

读入进制 P

双重循环输出乘法表
外层 i 从 1 到 P-1
内层 j 从 1 到 i 将 i、j、i * j 转换为 P 进制字符串

java 复制代码
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.Scanner;

public class Main {

   //转换进制
    public static String toBase(int value, int P){

        if (value == 0){
            return String.valueOf('0');
            //valueOf()把基本类型快速变成字符串
        } 
        StringBuilder sb = new StringBuilder();
        while(value>0){
            int temp = value % P;
            char ch ;
            if(temp < 10){
                ch = (char)('0' + temp);
            }else{
                ch = (char)('A' + (temp - 10));
            }
            sb.append(ch);
            //拼接字符串
            value /= P;
        }
        return sb.reverse().toString();
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int P = sc.nextInt();
        for (int i = 1;i < P;i++){
            for(int j = 1;j <= i;j++){
                System.out.print(toBase(i,P) + "*" + toBase(j,P) + "=" + toBase(i*j,P) + " ");
            }
            System.out.println();
        } 
    }
}
相关推荐
马优晨12 分钟前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
维天说3 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zane19943 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
噢,我明白了4 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
吠品4 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库
啊湘4 小时前
天气查询API接口 按月Token鉴权 实时天气 物联网可用 文档齐全
java·后端·struts
Java内核笔记5 小时前
告别十亿美元的错误 : Spring Boot 4 空安全 (JSpecify) 实战
java·spring boot·后端
糖果店的幽灵5 小时前
langgraph的 MessagesState 解读
java·开发语言·人工智能·windows·langgraph
极光代码工作室6 小时前
基于SpringBoot的在线博客系统
java·springboot·web开发·后端开发
我是唐青枫6 小时前
Java Spring Security 实战详解:从登录认证到 JWT 权限控制
java·spring