#include <stdio.h>
#include <string.h>

#define MAX_LEN 81 // 最大长度为80,加上末尾的'�',最大长度为81

int main()
{
    char a[MAX_LEN], b[MAX_LEN]; // 存储两个超长整数
    int c[MAX_LEN * 2] = {0}; // 存储乘积,最多为两个超长整数长度之和

    // 从键盘读入两个超长整数
    fgets(a, MAX_LEN, stdin);
    fgets(b, MAX_LEN, stdin);

    // 去掉输入数字的前导0
    int lena = strlen(a) - 1;
    while(a[lena-1] == '0' && lena > 1)
    {
        lena--;
    }
    int lenb = strlen(b) - 1;
    while(b[lenb-1] == '0' && lenb > 1)
    {
        lenb--;
    }

    // 乘法运算
    for(int i = 0; i < lena; i++)
    {
        int carry = 0; // 进位
        for(int j = 0; j < lenb; j++)
        {
            int temp = (a[lena-i-1]-'0') * (b[lenb-j-1]-'0') + carry + c[i+j]; // 乘积加上进位和之前的结果
            carry = temp / 10; // 求进位
            c[i+j] = temp % 10; // 保存结果的个位数
        }
        if(carry != 0) // 处理最高位的进位
        {
            c[i+lenb] += carry;
        }
    }

    // 输出结果
    int len = lena + lenb; // 乘积的位数等于两个超长整数的位数之和
    while(len > 0 && c[len-1] == 0) // 去掉前导0
    {
        len--;
    }
    if(len == 0) // 结果为0
    {
        printf("0");
    }
    else // 输出结果
    {
        for(int i = len-1; i >= 0; i--)
        {
            printf("%d", c[i]);
        }
    }

    return 0;
}
C语言实现超长整数乘法运算

原文地址: https://www.cveoy.top/t/topic/oRIU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录