记录编号 370035 评测结果 AAAAAAAAAAAA
题目名称 增强的乘法问题 最终得分 100
用户昵称 GravatarkZime 是否通过 通过
代码语言 C++ 运行时间 0.012 s
提交时间 2017-02-12 17:55:07 内存使用 1.33 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXN 100000
using namespace std;
#define is_num(tmp) (tmp<='9'&tmp>='0') 
//#define LOCAL
struct Bignum{
	int s[MAXN],len;
	Bignum (){
		memset(s,0,sizeof(s));
		len=1;
	}
	Bignum operator=(const char*num){
		len=strlen(num);
		for(int i=0;i<len;i++){
			s[i]=num[len-i-1]^48;
		}
		return *this;
	}
	Bignum operator*(const Bignum&a){
		Bignum b;
		if((len==1&&s[0]==0)||(a.len==1&&a.s[0]==0))return b;
		b.len=a.len+len;
		for(int i=0;i<len;i++){
			for(int j=0;j<a.len;j++){
				b.s[i+j]+=s[i]*a.s[j];
				b.s[i+j+1]+=b.s[i+j]/10;
				b.s[i+j]%=10;
			}
		}
		if(b.s[b.len-1]==0){
			b.len--;
		}
		return b;
	}
	void read()
	{
		char tmp(getchar());
		len=0;
		while(!is_num(tmp))tmp=getchar();
		while(is_num(tmp))
		  s[len]=tmp^48,tmp=getchar(),++len;
		swap();
		return ;
	}
	void put(){
		for(int i=len-1;i>=0;i--)
			cout<<s[i];
	}
	void swap()
	{
		int i(0),j(len-1);
		int tmp;
		while(i<j)
		{
			tmp=s[i];
			s[i]=s[j];
			s[j]=tmp;
			i++,j--;
		}
		return ;
	}
};
int main(){
#ifndef LOCAL 
	freopen("mul.in" ,"r",stdin ) ;
	freopen("mul.out","w",stdout) ;
#endif
	Bignum a,b;
	a.read();
	b.read();
	(a*b).put();
}