九九乘法表

中式/西式/任意进制

414 次访问

九九乘法表

小九九(三角形):上三角省略——因 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×91×1=1 1×2=2 … 9×9=81典型场景:标准中式 9×9 乘法表
西式 12×121×1=1 1×2=2 … 12×12=144常见用法:西式教育常用 12×12 表
中式 3×31×1=1 1×2=2 1×3=3 2×2=4 2×3=6 3×3=9边界 case:最小有效尺寸 3×3
西式 1×11×1=1边界 case:最小有效尺寸 1×1
中式 20×201×1=1 1×2=2 … 20×20=400边界 case:较大尺寸,测试性能
任意进制 8 进制 5×51×1=1 1×2=2 … 5×5=31(八进制)易错 case:输出为八进制,非十进制
任意进制 2 进制 3×31×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)的整数乘法表生成。不适用于非整数(小数/分数)或负数。进制转换基于标准基数表示法。

原理图

用户输入进制 / 范围(如 10 进制 1~9)浏览器内计算双重循环生成(中式 / 西式 / 任意进制)展示结果表格 / 列表(即时渲染)中式排列被乘数固定,乘数递增例:1×1 1×2 … 1×9→ 2×1 2×2 … 2×9西式排列结果相同,排列顺序不同例:1×1 2×1 … 9×1→ 1×2 2×2 … 9×2
用户输入 本地处理 输出结果

开发者集成

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 个高频疑问

这个九九乘法表工具支持哪些进制?
工具默认显示标准中式(1×1 到 9×9)和西式(1×1 到 12×12)两种模式。同时支持自定义进制,范围从 2 进制到 36 进制,在输入框选择进制数后,表格会自动按该进制显示乘数和结果。例如选 8 进制,5×7 的结果是 43(而非 35)。注意:结果值在超过 9 时会用字母 A-Z 表示(10=A, 11=B, 依此类推),与标准十六进制表示一致。
为什么我选了 12×12 西式,但表格里只有 9 行?
西式模式默认显示 1×1 到 12×12 共 12 行表格。如果只显示 9 行,可能是页面滚动未到底部,或者浏览器缩放导致表格被截断。请检查浏览器缩放比例(Ctrl+滚轮)是否在 100%,并尝试滚动页面。如果问题依旧,刷新页面重新加载——工具是纯前端实现,不依赖服务器,刷新后恢复默认状态。
这个工具和纸质九九乘法表卡片有什么区别?
纸质卡片一般是固定中式 9×9 表格,无法切换进制或扩展范围。本工具支持三种模式切换(中式/西式/自定义进制),输入任意两个乘数(1 到 36 范围内)即可高亮显示对应乘积位置,适合对比不同进制下的乘法规律。另外,工具无印刷成本,可随时重置或导出为截图,但需要电子设备配合使用。
为什么输入 0 或负数时表格不显示?
九九乘法表传统定义从 1×1 开始,乘数和被乘数都是正整数。本工具限制输入范围为 1 到 36(包括),超出此范围的值会被忽略或重置为默认值。0 和负数不属于乘法表教学范畴,如果确实需要计算负数的乘积,建议使用普通计算器或科学计算工具。
自定义进制下的结果怎么是字母?看不懂怎么办?
当进制大于 10 时,10 以上的数字用字母表示:A=10, B=11, C=12 ... Z=35。例如在 16 进制下,6×7 的结果是 2A(即 42 的十六进制表示)。如果不熟悉这种表示法,可以先将进制切回 10 进制查看标准结果,再切回目标进制对照学习。工具不提供进制转换计算器,建议配合进制转换工具使用。
这个工具会保存我的使用记录吗?
不会。所有计算和表格渲染都在浏览器本地完成,不向服务器发送任何数据。关闭页面或清除浏览器缓存后,所有设置(进制、模式选择)都会丢失。如果希望保留某次表格结果,可以使用浏览器截图或打印功能(Ctrl+P)保存为 PDF,工具本身没有导出或保存功能。
为什么表格里有些格子是空白(没有数字)?
默认情况下,表格只显示乘数 ≤ 被乘数(即上三角或下三角区域),避免冗余重复。例如中式 9×9 中,2×3 和 3×2 只出现一次。如果希望显示完整矩阵(所有组合),可以在页面设置中勾选「显示完整表格」选项。如果该选项不存在,说明当前版本仅支持三角模式,空白格子属于正常设计。
选择 打开 +新窗口 esc关闭