大数乘法转载:通过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
*/

相关文章

自1998年我国取消了福利分房的政策后,房地产市场迅速开展蓬...
文章目录获取数据查看数据结构获取数据下载数据可以直接通过...
网上商城系统MySql数据库设计
26个来源的气象数据获取代码
在进入21世纪以来,中国电信业告别了20世纪最后阶段的高速发...