九九乘法表
中式/西式/任意进制
小九九(三角形):上三角省略——因 a×b = b×a,只列 a ≤ b,共 45 项。最简版本,小学生入门。
完整版(矩形):9 行 9 列共 81 项,含重复,便于查表。
12 × 12 大表:12 之内乘法表,国外通用("times table"),含 10 / 11 / 12 段。
关于本工具
了解工具定位 · 使用场景 · 对比优势
使用场景
小学乘法启蒙
家长或老师辅导低年级学生背诵乘法表时,孩子容易混淆中式(9×9)与西式(12×12)的范围。本工具支持一键切换进制与显示模式,学生可直观对比两种乘法表的差异,并通过随机出题模式检验记忆效果,避免死记硬背导致的数字错位。
编程进制换算
程序员在调试二进制或十六进制运算时,经常需要手动验证乘法结果。本工具支持任意进制(2~36)的乘法表生成,输入进制后自动展示该进制下的全部乘积,帮助快速校验位运算逻辑,减少因进制转换错误导致的 bug 排查时间。
工程速查手册
现场施工或机械维修时,工人需要快速查找特定数字的乘积(如 7×8=56),但纸质乘法表容易磨损或丢失。本工具在浏览器内直接运行,无需联网,输入乘数后即时高亮显示结果,可作为随身电子速查表,提升现场计算效率。
数学游戏设计
桌游或教育 App 设计师需要制作乘法练习关卡,但手动罗列所有组合非常繁琐。本工具可一键导出指定进制下的完整乘法表(如 5×5 到 9×9),设计师直接复制数据填充题库,节省 80% 的重复录入时间,且确保无遗漏。
对比矩阵本工具 vs 竞品 vs 传统方法
| 维度 | 本工具 | 竞品 A (MathCelebrity) | 传统方法 |
|---|---|---|---|
| 数据隐私 | 纯浏览器,零上传 | 上传到服务器 | 依赖工作人员 |
| 处理速度 | 1 秒内 | 5-10 秒 | 数小时 |
| 离线可用 | 完全离线 | 需联网 | 需联网 |
| 进制支持 | 2-36 进制任意切换 | 仅十进制 | 仅十进制 |
| 输出格式 | 表格/列表/文本 | 表格 | 手写表格 |
| 大小限制 | 无限制 | 受服务器负载限制 | 受人力限制 |
使用指南
上手步骤 · 输入输出 · 避坑提示
输入输出示例7 个典型场景,覆盖常规、边界与易错
| 输入 | 输出 | 说明 |
|---|---|---|
| 中式 9×9 | 1×1=1 1×2=2 … 9×9=81 | 典型场景:标准中式 9×9 乘法表 |
| 西式 12×12 | 1×1=1 1×2=2 … 12×12=144 | 常见用法:西式教育常用 12×12 表 |
| 中式 3×3 | 1×1=1 1×2=2 1×3=3 2×2=4 2×3=6 3×3=9 | 边界 case:最小有效尺寸 3×3 |
| 西式 1×1 | 1×1=1 | 边界 case:最小有效尺寸 1×1 |
| 中式 20×20 | 1×1=1 1×2=2 … 20×20=400 | 边界 case:较大尺寸,测试性能 |
| 任意进制 8 进制 5×5 | 1×1=1 1×2=2 … 5×5=31(八进制) | 易错 case:输出为八进制,非十进制 |
| 任意进制 2 进制 3×3 | 1×1=1 1×10=10 … 11×11=1001(二进制) | 易错 case:输入输出均为二进制 |
常见错误对照7 个常踩的坑 · 错误 → 修复
1. 把十进制数直接当进制参数
进制参数填 "10",想生成八进制表进制参数填 "8",生成八进制乘法表进制参数指定的是乘法表的基数(base),不是当前输入数字的进制。填 10 就是生成十进制(标准)表,填 8 才是八进制表。
2. 混淆中式与西式的行列顺序
选「西式」后,认为第一行是 1×1=1,第二行是 2×2=4西式第一行 1×1=1,第二行 1×2=2(列递增),第三行 1×3=3中式按行数递增(第N行是被乘数=N),西式按列数递增(第N行的乘数从1到N)。西式常见于英语国家教材,行号不代表被乘数。
3. 进制值填了 0 或 1
进制参数填 "0" 或 "1"进制参数最小填 "2"(二进制),最大一般支持 36(0-9a-z)进制定义要求 base ≥ 2 才有意义;base=1 的计数系统不存在标准表示法,工具会报错或输出空表。
4. 把乘法表范围理解成行数
范围填 "5",以为只显示 5 行范围填 "5",生成 1×1 到 5×5 的完整表(共 5 行)范围参数是最大乘数/被乘数,不是行数。范围 N 生成 N 行,但每行长度随行号递增(中式)或固定 N 列(西式)。
5. 进制符号与数字混淆
进制填 "16",期望看到 A×B=6E 这样的十六进制结果进制填 "16",结果中数字用 0-9 和 A-F 表示,如 5×B=37(十进制 5×11=55 → 十六进制 37)十六进制结果中的字母 A-F 代表 10-15,不是代数符号。B 不是变量,是数字 11。
6. 认为结果一定是十进制数字
进制填 "8",看到结果 "7×7=61" 认为算错了(十进制 7×7=49)进制填 "8",结果 "7×7=61" 正确(八进制 61 = 十进制 49)输出结果的进制与输入的进制一致。八进制 61 等于十进制 49,不是计算错误。
7. 范围填了超过进制允许的最大数字
进制填 "2",范围填 "3"(二进制最大数字是 1)进制填 "2" 时范围只能填 "1"(生成 1×1 表)范围 N 表示从 1 到 N 的整数乘法。二进制中数字只有 0 和 1,范围 3 会引入不存在的数字 2 和 3,工具应限制范围 ≤ base-1。
工作原理
公式推导 · 流程图解 · 依据出处
核心公式
a × b = c
变量说明
a— 被乘数(0 到进制-1 的整数)b— 乘数(0 到进制-1 的整数)c— 乘积(十进制或指定进制结果)
示例
中式九九乘法表(十进制):a=3, b=7,则 c=3×7=21。西式乘法表(十进制):a=3, b=7,同样 c=21。若为八进制乘法表:a=3, b=7,则 c=3×7=21(十进制),转换为八进制为 25₈。
适用范围
适用于任意进制(2 到 36)的整数乘法表生成。不适用于非整数(小数/分数)或负数。进制转换基于标准基数表示法。
原理图
开发者集成
3 种主流语言 · 复制即用
def multiplication_table(base=10, style="chinese"):
"""生成任意进制的九九乘法表。
Args:
base: 进制(2-36)
style: "chinese"(中式,下三角)或 "western"(西式,完整方阵)
Returns:
字符串格式的乘法表
"""
if base < 2 or base > 36:
raise ValueError("进制必须在 2 到 36 之间")
digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
lines = []
if style == "chinese":
for i in range(1, base):
row = []
for j in range(1, i + 1):
product = i * j
# 将乘积转为指定进制
p = ""
temp = product
if temp == 0:
p = "0"
else:
while temp > 0:
p = digits[temp % base] + p
temp //= base
row.append(f"{digits[i]}×{digits[j]}={p}")
lines.append(" ".join(row))
else: # western
for i in range(1, base):
row = []
for j in range(1, base):
product = i * j
p = ""
temp = product
if temp == 0:
p = "0"
else:
while temp > 0:
p = digits[temp % base] + p
temp //= base
row.append(f"{digits[i]}×{digits[j]}={p}")
lines.append(" ".join(row))
return "\n".join(lines)
# 示例:生成 10 进制中式乘法表
print("10 进制中式乘法表:")
print(multiplication_table(10, "chinese"))
print()
# 示例:生成 16 进制西式乘法表(仅前 5 行)
print("16 进制西式乘法表(前 5 行):")
table = multiplication_table(16, "western")
for line in table.split("\n")[:5]:
print(line)package main
import (
"fmt"
"strconv"
"strings"
)
// 数字转任意进制字符串
func toBase(n, base int) string {
if n == 0 {
return "0"
}
digits := "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
result := ""
for n > 0 {
result = string(digits[n%base]) + result
n /= base
}
return result
}
// 生成乘法表
func multiplicationTable(base int, style string) string {
if base < 2 || base > 36 {
return "进制必须在 2 到 36 之间"
}
digits := "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var lines []string
if style == "chinese" {
for i := 1; i < base; i++ {
var row []string
for j := 1; j <= i; j++ {
product := i * j
row = append(row, fmt.Sprintf("%c×%c=%s", digits[i], digits[j], toBase(product, base)))
}
lines = append(lines, strings.Join(row, " "))
}
} else {
for i := 1; i < base; i++ {
var row []string
for j := 1; j < base; j++ {
product := i * j
row = append(row, fmt.Sprintf("%c×%c=%s", digits[i], digits[j], toBase(product, base)))
}
lines = append(lines, strings.Join(row, " "))
}
}
return strings.Join(lines, "\n")
}
func main() {
// 示例:8 进制中式乘法表
fmt.Println("8 进制中式乘法表:")
fmt.Println(multiplicationTable(8, "chinese"))
fmt.Println()
// 示例:12 进制西式乘法表(前 3 行)
fmt.Println("12 进制西式乘法表(前 3 行):")
table := multiplicationTable(12, "western")
lines := strings.Split(table, "\n")
for i := 0; i < 3 && i < len(lines); i++ {
fmt.Println(lines[i])
}
// 处理 strconv 导入(实际未使用,仅用于演示)
_ = strconv.Itoa(0)
}/**
* 将数字转换为任意进制字符串
* @param {number} n - 要转换的数字
* @param {number} base - 进制(2-36)
* @returns {string}
*/
function toBase(n, base) {
if (n === 0) return "0";
const digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
let result = "";
while (n > 0) {
result = digits[n % base] + result;
n = Math.floor(n / base);
}
return result;
}
/**
* 生成乘法表
* @param {number} base - 进制(2-36)
* @param {'chinese'|'western'} style - 样式
* @returns {string}
*/
function multiplicationTable(base, style = "chinese") {
if (base < 2 || base > 36) {
throw new Error("进制必须在 2 到 36 之间");
}
const digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const lines = [];
if (style === "chinese") {
for (let i = 1; i < base; i++) {
const row = [];
for (let j = 1; j <= i; j++) {
const product = i * j;
row.push(`${digits[i]}×${digits[j]}=${toBase(product, base)}`);
}
lines.push(row.join(" "));
}
} else {
for (let i = 1; i < base; i++) {
const row = [];
for (let j = 1; j < base; j++) {
const product = i * j;
row.push(`${digits[i]}×${digits[j]}=${toBase(product, base)}`);
}
lines.push(row.join(" "));
}
}
return lines.join("\n");
}
// 示例:5 进制中式乘法表
console.log("5 进制中式乘法表:");
console.log(multiplicationTable(5, "chinese"));
console.log();
// 示例:10 进制西式乘法表(前 3 行)
console.log("10 进制西式乘法表(前 3 行):");
const table = multiplicationTable(10, "western");
console.log(table.split("\n").slice(0, 3).join("\n"));常见问题
7 个高频疑问