c语言程序设计编写程序实现两个超长整数大于等于0每个最长80位数字的乘法运算。
以下是一个实现两个超长整数乘法的C语言程序:
#include <stdio.h>
#include <string.h>
#define MAX_LEN 80
void multiply(char num1[], char num2[], char result[]) {
int len1 = strlen(num1);
int len2 = strlen(num2);
int i, j, k;
int carry, sum;
// 初始化结果数组
for (i = 0; i < len1 + len2; i++) {
result[i] = '0';
}
result[i] = '\0';
// 从低位到高位逐位相乘
for (i = 0; i < len1; i++) {
carry = 0;
for (j = 0; j < len2; j++) {
// 计算当前位的乘积和进位
sum = (num1[len1 - 1 - i] - '0') * (num2[len2 - 1 - j] - '0') + carry + (result[i + j] - '0');
carry = sum / 10;
result[i + j] = sum % 10 + '0';
}
// 处理最后的进位
if (carry > 0) {
result[i + j] += carry;
}
}
// 去掉前导0
i = strlen(result) - 1;
while (i > 0 && result[i] == '0') {
result[i] = '\0';
i--;
}
}
int main() {
char num1[MAX_LEN + 1];
char num2[MAX_LEN + 1];
char result[MAX_LEN * 2 + 1];
printf("请输入两个超长整数(每个最长%d位):\n", MAX_LEN);
scanf("%s%s", num1, num2);
multiply(num1, num2, result);
printf("乘积为:%s\n", result);
return 0;
}
这个程序中,我们使用了一个multiply()函数来实现两个超长整数的乘法。该函数接受三个参数,分别是需要相乘的两个超长整数和存储结果的数组。在函数中,我们首先计算出需要分别从低位到高位逐位相乘的两个超长整数的长度,然后初始化结果数组为全0。接下来,我们从低位到高位逐位相乘,将乘积和进位加到结果数组中,最后去掉结果数组前面的0即可。
在主函数中,我们首先读入两个超长整数,然后调用multiply()函数计算它们的乘积,最后输出结果。
需要注意的是,这个程序中我们假设输入的两个超长整数都是合法的,即不包含任何非数字字符。如果需要进行输入检查,可以使用isdigit()函数判断每个字符是否是数字。这里不再赘述
原文地址: https://www.cveoy.top/t/topic/f8h4 著作权归作者所有。请勿转载和采集!