大数乘法

大数乘法

http://poj.grids.cn/practice/solution/1789958/

问题描述:
求两个不超过200位的非负整数的积。

输入:

有两行,每行是一个不超过200位的非负整数,没有多余的前导0。

输出:

一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

输入样例:

12345678900
98765432100

输出样例:

1219326311126352690000

代码:

#include <iostream>
using namespace std;
#define N 200
#include<cstring>
#include<string>
int a[N],b[N],sum[2*N];
void multi(string s1,string s2,int sum[])
{
	memset(sum,0,sizeof(sum));
	int i,j,index;
	index=0;
	for(i=s1.size()-1;i>=0;i--)
	a[index++]=s1[i]-'0';
	index=0;
	for(i=s2.size()-1;i>=0;i--)
	b[index++]=s2[i]-'0';
	
	for(i=0;i<s1.size();i++)
	{
		for(j=0;j<s2.size();j++)
		sum[i+j]+=a[i]*b[j];
	}
	for(i=0;i<2*N;i++)
	{
		if(sum[i]>9)
		{
			sum[i+1]+=sum[i]/10;
			sum[i]=sum[i]%10;
		}
	}
	bool flag=false;
	for(i=2*N-1;i>=0;i--)
	{
		if(flag||sum[i])
		{ 
			flag=true;
			cout<<sum[i];
		}
	}
	if(!flag)
	cout<<"0";
	cout<<endl;
		
}
int main(int argc, char *argv[])
{
	
	string s1,s2;

	cin>>s1>>s2;
	multi(s1,s2,sum);
	return 0;
}

 

 

 

    原文作者:大整数乘法问题
    原文地址: https://blog.csdn.net/zhaochengyuan/article/details/7904669
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞