记录编号 334099 评测结果 AAAAAAAAAAAA
题目名称 增强的乘法问题 最终得分 100
用户昵称 GravatarLOSER 是否通过 通过
代码语言 C++ 运行时间 0.026 s
提交时间 2016-10-31 19:22:34 内存使用 1.72 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 100010
int n,m;
struct Bignumber{
	int data[maxn];
	void Init() {
		memset(data,0,sizeof(data));
		char s[maxn]; scanf("%s",s); data[0]=strlen(s);
		for(int i=1,j=data[0]-1;i<=data[0];i++,j--) data[i]=s[j]-'0'; 
	}
	void Print() {
		for(int i=data[0];i>=1;i--){
			printf("%d",data[i]);	
		}	printf("\n");
	}
	Bignumber operator + (const Bignumber &a)const{
		Bignumber b;
		memset(b.data,0,sizeof(b.data));
		b.data[0]=max(a.data[0],data[0]);
		for(int i=1;i<=b.data[0];i++) {
			b.data[i]=a.data[i]+data[i];
			b.data[i+1]+=b.data[i]/10;
			b.data[i]%=10;	
		}	if(b.data[b.data[0]+1]) b.data[0]++;
		return b;
	}
	Bignumber operator * (const Bignumber & a)const{
		Bignumber b;
		memset(b.data,0,sizeof(b.data));
		b.data[0]=a.data[0]+data[0];
		
		for(int i=1;i<=data[0];i++) {
			for(int j=1;j<=a.data[0];j++) {
				b.data[i+j-1]+=data[i]*a.data[j];
				b.data[i+j]+=b.data[i+j-1]/10;
				b.data[i+j-1]%=10; 	
			}
		}	
		while(b.data[0]>1 && b.data[b.data[0]]==0) b.data[0]--;
		return b;
 	}
}A,B,C;
int main(){
    freopen("mul.in","r",stdin); freopen("mul.out","w",stdout);
	A.Init(),B.Init();
	//A.Print(),B.Print();
    C=A*B; 	C.Print();
    getchar(); getchar();
	//fclose(stdin); fclose(stdout);
    return 0;
}