题解:AcWing 793 高精度乘法

【题目来源】

AcWing:793. 高精度乘法 - AcWing题库

【题目描述】

给定两个非负整数(不含前导 \(0\)\(A\)\(B\),请你计算 \(A\times B\) 的值。

【输入】

共两行,第一行包含整数 \(A\),第二行包含整数 \(B\)

【输出】

共一行,包含 \(A\times B\) 的值。

【输入样例】

2
3

【输出样例】

6

【解题思路】

image

【算法标签】

《AcWing 793 高精度乘法》 #高精度#

【代码详解】

#include <bits/stdc++.h>
using namespace std;

// 大整数乘以小整数的函数
vector<int> mul(vector<int> &A, int b) {
    vector<int> C;  // 存储结果
    int t = 0;      // 进位值,初始为0
    
    // 遍历大整数的每一位
    for (int i = 0; i < A.size() || t; i++) {
        // 如果当前位存在,则计算乘积并加上进位
        if (i < A.size()) t += A[i] * b;
        // 存储当前位的计算结果
        C.push_back(t % 10);
        // 计算新的进位
        t /= 10;
    }
    
    // 去除前导零(保留至少一位)
    while (C.size() > 1 && C.back() == 0) 
        C.pop_back();
    
    return C;
}

int main() {
    string a;  // 存储大整数的字符串形式
    int b;     // 小整数
    cin >> a >> b;
    
    vector<int> A;  // 存储大整数(逆序)
    // 将字符串转换为逆序的数字数组
    for (int i = a.size() - 1; i >= 0; i--) 
        A.push_back(a[i] - '0');
    
    // 计算乘积
    auto C = mul(A, b);
    
    // 输出结果(需要逆序输出)
    for (int i = C.size() - 1; i >= 0; i--) 
        printf("%d", C[i]);
    
    return 0;
}

【运行结果】

2
3
6
posted @ 2026-02-20 22:21  团爸讲算法  阅读(2)  评论(0)    收藏  举报