您的位置:首页 > 其它

大数相乘

2015-03-29 17:16 197 查看
比较大的两个数相乘,采用字符运算,按位相乘,控制好进位就可以了。

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

//大数相乘
#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;
}
运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: