现在的位置: 首页 > 综合 > 正文

大数乘法的简单实现

2014年07月27日 ⁄ 综合 ⁄ 共 1020字 ⁄ 字号 评论关闭

输入两个数(大数),计算成绩结果。

#include <iostream>
#include <string>
using namespace std;
const int MaxSize=3000;
//模拟手算,大数.   2014-1-20 
int data[MaxSize+5];
int *aArray,*bArray;
int aSize,bSize;
void gsh(int i)
{//从i到j个位置格式化
	int k;
	for(k=i;k<=aSize+bSize+1;k++)
	{
		if(data[k]>9)
		{
			data[k+1]+=data[k]/10;
			data[k]%=10;
		}
	}
}
void fun()
{
	int relust,i,j;
	for(i=1;i<=bSize;i++)
	{		
		for(j=1;j<=aSize;j++)
		{
			relust=bArray[i]*aArray[j];
			data[i+j-1]+=relust;
			gsh(i);//从i进位,全部是否进位格式化
		}
	}
	relust=0;
	for(i=bSize+aSize+1;i>=1;i--)
		if(data[i])	break;
	for(;i>=1;i--)
		cout<<data[i];
	cout<<endl;
}
int main()
{
	int i,j;
	string a,b;
	cin>>a>>b;//输入的数字保存在string中
	aArray=new int[a.length()+3];
	bArray=new int[b.length()+3];//将数字保存在int数组中
	memset(aArray,0,sizeof(aArray));
	memset(bArray,0,sizeof(bArray));
	for(i=a.length(),j=1;i>=0;i--)
		if(a[i]>='0'&&a[i]<='9')
			aArray[j++]=a[i]-'0';
	aSize=j-1;
	for(i=b.length(),j=1;i>=0;i--)
		if(b[i]>='0'&&b[i]<='9')
			bArray[j++]=b[i]-'0';
	bSize=j-1;
	for(i=0;i<=MaxSize;i++)
		data[i]=0;
	fun();
//	for(i=aSize;i>0;i--)
//		cout<<aArray[i]; //test
//	cout<<endl<<endl;
//	for(i=bSize;i>0;i--)
//		cout<<bArray[i];
	return 0;
}

抱歉!评论已关闭.