1 条题解

  • 0
    @ 2025-11-17 17:38:11

    #include #include #include

    // 使用标准命名空间 using namespace std;

    int main() { // 定义字符数组存储输入的大整数 char a[205], b[205]; // num1, num2: 存储反转后的大整数(便于计算) // num: 存储乘法结果 // ans: 辅助处理进位 int num1[205] = {0}; int num2[205] = {0}; int num[505] = {0}; int ans = 0;

    // 输入两个大整数
    cin >> a >> b;
    
    // 获取字符串长度
    int lena = strlen(a);
    int lenb = strlen(b);
    
    // 将字符串 a 转换为数字并反转存储到 num1
    for (int i = 0; i < lena; i++)
    {
        num1[lena - i] = a[i] - '0';
    }
    
    // 将字符串 b 转换为数字并反转存储到 num2
    for (int i = 0; i < lenb; i++)
    {
        num2[lenb - i] = b[i] - '0';
    }
    
    // 大整数乘法核心:逐位相乘并累加结果
    for (int i = 1; i <= lena; i++)
    {
        for (int j = 1; j <= lenb; j++)
        {
            num[i + j - 1] += num1[i] * num2[j];
        }
    }
    
    // 处理进位
    int maxlen = lena + lenb - 1;
    for (int i = 1; i <= maxlen; i++)
    {
        ans += num[i];
        num[i] = ans % 10;
        ans /= 10;
    }
    
    // 如果最后还有进位,继续处理
    if (ans > 0)
    {
        num[++maxlen] = ans;
    }
    
    // 去除结果前面多余的零(最高位的零)
    while (num[maxlen] == 0 && maxlen > 1)
    {
        maxlen--;
    }
    
    // 输出最终结果(从最高位到最低位)
    for (int i = maxlen; i >= 1; i--)
    {
        cout << num[i];
    }
    cout << endl; // 输出换行,使终端输出更整洁
    
    return 0;
    

    }

    • 1

    信息

    ID
    613
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    12
    已通过
    2
    上传者