加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数相乘

发布时间:2020-12-14 02:41:11 所属栏目:大数据 来源:网络整理
导读:比较大的两个数相乘,采用字符运算,按位相乘,控制好进位就可以了。 相关示例参考:可怕的阶乘? //大数相乘#includeiostreamusing namespace std;#define max 100void CalcNN(char *A,char *B,char *C){if(NULL==A||NULL==B){return;}int len_a=strlen(A);i

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

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

//大数相乘
#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]='';
		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]='';
}

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;
}
运行结果:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读