大数乘法,超级简单模板

在算法竞赛中,高精度(大整数)乘法最容易出错的地方是进位处理前导零去除

这里为你提供一个最适合在比赛中快速默写、不易出错的 C++ 模板。它的核心技巧是模拟竖式乘法并利用下标规律num1 的第 i 位和 num2 的第 j 位相乘,其乘积一定会累加到结果数组的第 i + j + 1 位,而进位会落在 i + j 位。

cpp 复制代码
#include <iostream>
#include <vector>
#include <string>

using namespace std;

string multiply(string num1, string num2) {
    // 1. 特判 0 的情况,防止最后输出空字符串或多个 0
    if (num1 == "0" || num2 == "0") return "0";
    
    int n = num1.size(), m = num2.size();
    // 2. 两个数相乘,最大长度不会超过它们的长度之和
    vector<int> res(n + m, 0);

    // 3. 从右向左遍历(从低位到高位)
    for (int i = n - 1; i >= 0; i--) {
        for (int j = m - 1; j >= 0; j--) {
            // 当前乘积 + 原有进位
            int sum = (num1[i] - '0') * (num2[j] - '0') + res[i + j + 1];
            
            // 更新当前位
            res[i + j + 1] = sum % 10;
            // 更新进位(注意这里是 +=,因为进位可能累积)
            res[i + j] += sum / 10;
        }
    }

    // 4. 转回字符串并去除前导零
    string ans = "";
    for (int p : res) {
        // 只要 ans 不是空的,或者当前数字不是 0,就加进去
        if (!(ans.empty() && p == 0)) {
            ans.push_back(p + '0');
        }
    }
    
    return ans;
}
相关推荐
库玛西1 小时前
深入浅出传输层:UDP 与 TCP 协议全景指南
linux·服务器·网络·c++·笔记·tcp/ip·udp
Chester_19997 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
裕晟资质规划8 小时前
武器装备科研生产单位保密资质申请方法论:条件模型与流程拆解
人工智能·算法
EXI-小洲8 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员9 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导9 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan9 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
小灰灰搞电子9 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化9 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
m0_695251499 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt