// bigMultiply.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <string>
#include<cstdio>
#include <iostream>
using namespace std;
const int MaxN=1000;
int MAX(int a,int b)
{
return a>b?a:b;
}
class BigN
{
private:
int len,BigArr[MaxN];
public:
BigN() {memset(BigArr,0,sizeof(BigArr));len=1;}
BigN(int num){*this=num;}
BigN(const char* num){*this=num;}
BigN operator=(const char* Num)
{
len=strlen(Num);
for(int i=0;i<len;i++)
BigArr[i]=Num[len-i-1]-'0';
return *this;
}
BigN operator=(int num)
{
char s[MaxN];
sprintf(s,"%d",num);
*this=s;
return *this;
}
BigN& operator =(const BigN& Num)
{
if(this==&Num)
return *this;
len=Num.len;
for(int i=0;i<len;i++)
BigArr[i]=Num.BigArr[i];
return *this;
}
string str() const
{
string res="";
for(int i=0;i<len;i++)
res=(char)(BigArr[i]+'0')+res;
if(res=="") res="0";
return res;
}
BigN operator+(const BigN& b) const
{
BigN c;
c.len=0;
int Carry=0;
for(int i=0;i< MAX(len,b.len);i++)
{
int s=Carry;
if(i<len) s+=BigArr[i];
if(i<b.len) s+=b.BigArr[i];
c.BigArr[c.len++]=s%10;
Carry=s/10;
}
return c;
}
BigN operator+=(const BigN& b)
{
*this=*this+b;
return *this;
}
void clean()
{
while(len > 1 && !BigArr[len-1]) len--;
}
BigN operator-(const BigN b) const
{
BigN c;
c.len=0;int i=0;
int Carry=0;
for(;i<b.len;i++)
{
int s=BigArr[i]+Carry;
if(BigArr[i]==0&&Carry==-1) s=9;
else Carry=0;
if(s<b.BigArr[i])
{
Carry--;
s+=10;
}
s=s-b.BigArr[i];
c.BigArr[c.len++]=s;
}
for(;i<len;i++)
{
if(Carry==-1&&BigArr[i]==0)
c.BigArr[c.len++]=9;
else
break;
}
c.BigArr[c.len++]=BigArr[i]-1;
for(;i<len;i++)
c.BigArr[c.len++]=BigArr[i];
c.clean();
return c;
}
BigN operator-=(const BigN b)
{
*this=*this-b;
return *this;
}
BigN operator* (const BigN& b)
{
BigN c;
c.len=len+b.len;
for(int i=0;i<len;i++)
{
for(int j=0;j<b.len;j++)
{
c.BigArr[i+j]+=BigArr[i]*b.BigArr[j];
}
}
for(int i=0;i<c.len-1;i++)
{
c.BigArr[i+1]+=c.BigArr[i]/10;
c.BigArr[i]%=10;
}
c.clean();
return c;
}
bool operator<(const BigN& b) const
{
if(len!=b.len) return len<b.len;
for(int i=len-1;i>=0;i--)
if(BigArr[i]!=b.BigArr[i])
return BigArr[i]<b.BigArr[i];
return false;
}
bool operator >(const BigN& b) const
{
return b< *this;
}
bool operator <=(const BigN& b) const
{
return !(*this>b);
}
bool operator >=(const BigN& b) const
{
return !(*this<b);
}
bool operator !=(const BigN& b) const
{
return !(*this>b||*this<b);
}
bool operator ==(const BigN& b) const
{
return !(*this!=b);
}
friend istream& operator>>(istream &in,BigN& x)
{
string s;
in>>s;
x=s.c_str();
return in;
}
friend ostream& operator<<(ostream& out,BigN& x)
{
out<<x.str();
return out;
}
~BigN() {len=0;memset(BigArr,0,sizeof(BigArr));}
};
int _tmain(int argc, _TCHAR* argv[])
{
BigN tempA="555553";
BigN tempB="32134";
BigN temp=tempA*tempB;
cout<<temp;
return 0;
}