c语言实现两个大数相乘

实现两个不限位数十进制整数的乘法函数,
demon

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

int main()
{
	int i,j,z,k;
	int f_m1,f_m2,f_k;
	int carry;
	int result_int_len;
	int x_len,y_len;
	int x[101], y[101];
	char multiplier_x[101];
	char multiplier_y[101];
	char result_char[100000];
	int reuslt_int[100000];
	
	memset(result_char,0,sizeof(result_char));
	memset(reuslt_int,0,sizeof(reuslt_int));
	memset(multiplier_x,0,sizeof(multiplier_x));
	memset(multiplier_y,0,sizeof(multiplier_y));
	scanf("%s%s",multiplier_x,multiplier_y);

	x_len = strlen(multiplier_x);
	y_len = strlen(multiplier_y);

	for(i = 0; i < x_len ; i++)
	{	
		x[i] = multiplier_x[i] - '0';
		printf("===========x[%d] is %d\n",i,x[i]);
	}
	for(j = 0; j < y_len ; j++)
	{
		y[j] = multiplier_y[j] - '0';
		printf("===========y[%d] is %d\n",j,y[j]);
	}

	f_m1 = x_len;
	for(i = 0; i < x_len ; i++)
	{
		f_m1--;
		f_m2 = y_len;
		for(j = 0; j < y_len ; j++)
		{
			f_m2--;
			z = x[f_m1] * y [f_m2];
			printf(" z is %d\n",z);
			reuslt_int[j+i] = z%10 + reuslt_int[j+i];
			k = j+i+1;
			printf("====k is %d | reuslt_int[j+i] is %d\n",k,reuslt_int[j+i]);
			
			if(reuslt_int[j+i] > 9)//判断是否需要进位
			{
				reuslt_int[j+i] = reuslt_int[j+i]%10;
				carry = j+i+1;
				reuslt_int[carry] = 1 + reuslt_int[carry];
				printf("[%d] reuslt_int[%d] is %d\n",__LINE__,i+j,reuslt_int[j+i]);
				while( 9 < reuslt_int[carry])//进位之后相加再判断是否需要进位
				{
					reuslt_int[carry] = reuslt_int[carry]%10;
					carry++;
					printf("||||=====carry is %d \n",carry);
					reuslt_int[carry] = 1 + reuslt_int[carry];
				}
			}
			
			if(z > 9)//判断是否需要进位
			{	
				carry = j+i+1;
				reuslt_int[carry] = z/10 + reuslt_int[carry];
				printf("[%d] reuslt_int[%d] is %d\n",__LINE__,i+j,reuslt_int[carry]);
				while( 9 < reuslt_int[carry])//进位之后相加再判断是否需要进位
				{
					reuslt_int[carry] = reuslt_int[carry]%10;
					carry++;
					printf("[%d] reuslt_int[%d] is %d\n",__LINE__,i+j,reuslt_int[carry]);
					reuslt_int[carry] = 1 + reuslt_int[carry];
				}
				k = j+i+2;
				printf("k is %d\n",k);
			}
		}
	}
	f_k = k;
	for(i = 0; i < f_k ; i++)//位数反转
	{
		result_char[i] = reuslt_int[k-1] + '0';
		printf(" result_char[%d] is %d\n",i,result_char[i]);
		k--;
	}
	printf("===========%s \n",result_char);
	return 0;
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值