大数乘法的简单实现

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

#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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值