/*
【程序31】 大数相乘
* 题目:求出两个非常大的数的乘积,例如:123456789123456*123456789
* 程序分析:乘积非常大,int、long、long long 等数据类型都装不下这个数怎么办?采用数组方式求。 */
#include <stdio.h>
#include <string.h> //strlen() memset()
#define SIZE 1000
void mul_oper(const char num1[], const char num2[]);
void output(int num[], int len);
int main(int argc, char *argv[])
{
char num1[SIZE] = {};
char num2[SIZE] = {};
puts("Input number1:");
scanf("%s", num1);
fputs("Input number2:\n", stdout);
scanf("%s", num2);
printf("Result = ");
mul_oper(num1, num2);
return 0;
}
// 乘法运算
void mul_oper(const char num1[], const char num2[])
{
unsigned int len1 = strlen(num1);
unsigned int len2 = strlen(num2);
int result_mul[len1+len2];
memset(result_mul, 0, sizeof(result_mul));
// 转换并相乘
for (int i=0; i<len1; i++)
{
for (int j=0; j<len2; j++)
{
result_mul[i+j+1] += (num1[i]-'0') * (num2[j]-'0');
}
}
// 进位
for (int i=len1+len2-1; i>=0; i--)
{
result_mul[i-1] += result_mul[i]/10;
result_mul[i] %= 10;
}
output(result_mul, len1+len2);
}
// 输出
void output(int result[], int len)
{
int k, n = 0;
while (result[n] == 0){n++;}
for (k=n; k<len; k++)
{
if ((len-k)%3 == 0 && k != n) // 倒数每隔3位输出一个逗号“,”
printf(",");
printf("%d", result[k]);
}//for
printf("\n");
}
结果: