C语言实现超长整数乘法运算
#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;
}
原文地址: https://www.cveoy.top/t/topic/oRIU 著作权归作者所有。请勿转载和采集!