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

精度计算-大数乘大数

发布时间:2020-12-14 02:34:09 所属栏目:大数据 来源:网络整理
导读:精度计算 ? ? ? ? ? ? ? ? ? ? 大数乘大数 本算法是用来计算一个大数(现有的数据类型无法表示的数)乘以一个 大数(现有的数据类型无法表示的数) 。 算法思路是把大数的每一位都当做一个字符放入一个字符数组中,再把乘数的各个位与被乘数的各个位从最高位

精度计算 ? ? ? ? ? ? ? ? ? ? 大数乘大数

本算法是用来计算一个大数(现有的数据类型无法表示的数)乘以一个大数(现有的数据类型无法表示的数)
算法思路是把大数的每一位都当做一个字符放入一个字符数组中,再把乘数的各个位与被乘数的各个位从最高位依次相乘,将结果存放在一个二维数组res中。例如计算12*12,res[0][0] = 1,res[0][1] = 2,res[1][0] = 2,res[1][1] = 4,那么最终结果的数组s,s[0] = res[0][0]= 1,s[1] = res[0][1]+res[1][0] = 4,s[2] = res[1][1] = 4,但是此时输出的话,结果是441,我们需要用for循环将结果逆置。更多位数的计算在过程上会更麻烦但远离上是一样的。
#include<stdio.h>
#include<string.h>
void mult(char a[],char b[],char s[]);
main()
{
	char a[65] = "12";
	char b[65] = "12";
	char s[130] = "";
	mult(a,b,s);
	printf("%s",s);
}
void mult(char a[],char s[])
{
	int i,j,k=0,alen,blen,sum=0,res[65][65]={0},flag=0;
	char result[65];
	alen=strlen(a);
	blen=strlen(b); 
	for (i=0;i<alen;i++)
	{
		for (j=0;j<blen;j++)
		{
			res[i][j]=(a[i]-'0')*(b[j]-'0');
		}
	}
	for (i=alen-1;i>=0;i--)
	{
		for (j=blen-1;j>=0;j--)
		{
			sum=sum+res[i+blen-j-1][j];
		}
		result[k]=sum%10;
		k=k+1;
		sum=sum/10;
	}
	for (i=blen-2;i>=0;i--)
	{
		for (j=0;j<=i;j++)
		{
			sum=sum+res[i-j][j];
		}
		result[k]=sum%10;
		k=k+1;
		sum=sum/10;
	}
	if (sum!=0) 
	{
		result[k]=sum;
		k=k+1;
	}
	for (i=0;i<k;i++) 
	{
		result[i]+='0';
	}
	for (i=k-1;i>=0;i--) 
	{
		s[i]=result[k-1-i];
	}
	s[k]='';
	while(1)
	{
		if (strlen(s)!=strlen(a)&&s[0]=='0') 
			strcpy(s,s+1);
		else
			break;
	}
}

?
下面是我的C语言实现过程。

(编辑:李大同)

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

    推荐文章
      热点阅读