微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

大数乘法转载:通过C语言数组模拟

 

#include<iostream>
using namespace std;
char *multi(char *p,char *q)//大乘法,仔细想想,用笔写写就可以看懂了
{
	int maxLen,minLen,i,j;
	char *min,*max; 
	int *a = new int[100];
	if(strlen(p) > strlen(q))
	{
		maxLen = strlen(p);
		minLen = strlen(q);
		
		min = q;
		max = p;
	}
	else
	{
		maxLen = strlen(q);
		minLen = strlen(p);
		
		min = p;
		max = q;
	}
	memset(a,100);//将字符串置0
	int length = maxLen;
	char *c = new char[50];
	for(i = minLen - 1 ; i >= 0 ; i--)
	{
		for(j = 0 ; j < maxLen ; j++)
		{
			a[j] += (max[j] - '0') * (min[i] - '0');//将结果存放在a[j]中
		}
		
		if(i > 0)
		{
			for(int k = length - 1 ; k >= 0 ; k--)//如果i>0则说明乘数前面还有位数,则求的结果要向有移动一位
			{
				a[k + 1] = a[k]; 
			}
			a[0] = 0;
			length ++;
		}
	}
	
	for(i = length - 1 ; i > 0 ; i--)
	{
		a[i - 1] += a[i] / 10;//满十进一
		a[i] %= 10;
	}
	
	if(a[0] > 9)//当a[0] > 9的时候则说明位数不够
	{
		int temp = a[0];
		a[0] %= 10;
		temp /= 10;
		while(temp)
		{
			for(i = length - 1 ; i >= 0 ; i--)//补齐位数
				a[i + 1] = a[i];			
			a[0] = temp % 10;
			length ++;
			temp /= 10;
		}
		
	}
	
	for(i = 0; i < 21 - length; i++)//如果结果不足21位,往前补0
		c[i] = '0';
	int k = 0;
	for(i = 21 - length; i < 21; i++)
		c[i] = a[k++] + '0';
	c[i] = '\0';
	return c;
}

void main()
{
	char* num = multi("22343454533","3234354454");
	int i;
    for(i = 0; i< strlen(num); i++)
		if(num[i] == '0')
			continue;
		else 
			break;
		num = &num[i];
		cout<<num<<endl;	
}
/*
72266651686555039982
*/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐