不能直接用 long long 做大数乘法,因其最大值约 9e18,两个 10 位数相乘即可能溢出;C++ 无内置高精度类型,需模拟竖式乘法,核心是确保每步计算不溢出,常用 vector 反向存低位,逐位相乘、统一进位。

为什么不能直接用 long long 做大数乘法
因为超过 2^63-1(约 9e18)就溢出,两个 10 位数相乘就可能越界。比如 1234567890 * 9876543210 结果是 12 位,long long 存不下。C++ 没有内置高精度类型,必须自己模拟竖式乘法过程。
关键不是“怎么存大数”,而是“怎么让每一步计算不溢出”。所以通常用 vector 存低位在前的数字(如 "123" 存为 {3,2,1}),每位只存 0–9,乘法时逐位算、进位拆解到高位。
- 输入字符串转为反向
vector:避免后续反转,也方便下标对齐 - 结果数组长度最多是两数长度之和(比如 100 位 × 100 位 → 最多 200 位)
- 每次
i位 ×j位,结果加到i + j位置,进位统一最后处理,比边算边进位更稳
multiply 函数的核心循环逻辑怎么写
假设 a 和 b 是反向存储的数字(a[0] 是个位),结果存在 res 中,长度预设为 a.size() + b.size():
res[i+j+1]
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











