大数相乘

比较大的两个数相乘,采用字符运算,按位相乘,控制好进位就可以了。

相关示例参考:可怕的阶乘 

//大数相乘
#include<iostream>

using namespace std;

#define max 100

void CalcNN(char *A,char *B,char *C)
{
	if(NULL==A||NULL==B)
	{
		return;
	}
	int len_a=strlen(A);
	int len_b=strlen(B);

	int len_c=0;

	if((len_a==1&&A[0]=='0')||(len_b==1&&B[0]=='0'))
	{
		C[0]='0';
		C[1]='\0';
		return;
	}

	int bit[max]={0};

	for(int i=len_a-1;i>=0;i--)
	{
		for(int j=len_b-1;j>=0;j--)
		{
			bit[(len_a+len_b-2)-(j+i)]+=((A[i]-'0')*(B[j]-'0'));//按位相乘
		}
	}

	for(int i=0;i<max;i++)
	{
		if(bit[i]>9)
		{
			for(int k=i;k<max&&bit[k]>9;k++)//计算进位
			{
				bit[k+1]+=(bit[k]/10);
				bit[k]=(bit[k]%10);
			}
		}
	}

	int len=max-1;
	while(bit[len]==0)
	{
		len--;
	}

	for(int i=len;i>=0;i--)
	{
		C[len_c++]=bit[i]+'0';
	}
	C[len_c]='\0';
}

int main()
{
	char A[max]={0};
	char B[max]={0};
	char C[max]={0};
	while(1)
	{
		cout<<"乘数:";
		gets(A);
		cout<<"乘数:";
	    gets(B);

	    CalcNN(A,B,C);

		cout<<"积  :";
	    puts(C);
	}
	system("pause");
	return 0;
}
运行结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值