<C语言经典100例>c31 大数相乘

/* 
【程序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");
}



结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值