foj 1453 Bignum Arithmetic

题目

Problem Description

In this problem, you will be concerned with integers with very large numbers of digits. You must write code which will repeatedly accept (until end of file) two lines each containing an unsigned integer, and output the product of the two input unsigned integers. The output must not contain any leading zeros.
You can assume that each integer will contain at most 80 digits. The input ends with an end of file.

Sample Input

0342
1298
12
3

Sample Output

443916
36

大意:进行大数乘法运算

#include<iostream>
#include<cstring>
using namespace std;
char s1[81],s2[81];
int a1[81],a2[81];
int c[6410];
int main()
{
	int i,j=0;
	int e=0,k;
	memset(s1,'\0',sizeof(s1));
	memset(s2,'\0',sizeof(s2));
	memset(a1,0,sizeof(a1));
	memset(a2,0,sizeof(a2));
	memset(c,0,sizeof(c));
	while(cin>>s1>>s2)
	{
		j=0;
		int len1=strlen(s1);
		int len2=strlen(s2);
		for(i=len1-1;i>=0;i--)
			a1[j++]=s1[i]-'0';
		j=0;
		for(i=len2-1;i>=0;i--)
			a2[j++]=s2[i]-'0';
		j=0;
		e=0;
		for(i=0;i<len1;i++)
		{
			k=i;//位数的移动 
			for(j=0;j<len2+1;j++)//加一是为了进位也能够存储下来(即使接下来没有两个数的相乘) 
			{
				c[k]=a2[j]*a1[i]+c[k]+e;
				e=c[k]/10;
				c[k]%=10;
				k++;
			}
		}
		bool flag=false;
		for(i=6409;i>=0;i--)
		{
			if(flag) cout<< c[i];
			else if(c[i])
			{
				cout<< c[i];
				flag=true;
			}
			else if(c[i]==0&&i==0)
			{
				cout<<c[i];
			}
			
		}
		cout<<endl;
		memset(s1,'\0',sizeof(s1));
		memset(s2,'\0',sizeof(s2));
		memset(a1,0,sizeof(a1));
		memset(a2,0,sizeof(a2));
		memset(c,0,sizeof(c));
	}
	return 0; 
} 

注意点:乘零的情况要记得输出0

posted on 2017-04-02 03:43  linese-d  阅读(174)  评论(0)    收藏  举报

导航