运行结果:
代码如下:
#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
using namespace std;
class BigInteger
{
public:
string value;
//重载为成员函数格式
string operator*(const BigInteger &v)
{
string a=this->value;
string b=v.value;
int lengthA,lengthB,aInt[205],bInt[205],mul[205]={0},mark,start;
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
lengthA=a.length();
lengthB=b.length();
for(int i=0;i<lengthA;i++)
{
aInt[i]=(int)(a[i]-'0');
}
for(int i=0;i<lengthB;i++)
{
bInt[i]=(int)(b[i]-'0');
}
//开始相乘
for(int i=0;i<lengthA;i++)
{
for(int j=0;j<lengthB;j++)
{
mul[i+j]+=aInt[i]*bInt[j];
}
}
//处理
for(int i=0;i<lengthA+lengthB;i++)
{
mul[i+1]+=(int)mul[i]/10;
mul[i]=mul[i]%10;
}
//结果转化成字符串
char mulChar[205];
mark=204;
while(mul[mark]==0)
mark--;
start=0;
for(int i=mark;i>=0;i--)
{
mulChar[start]=(char)(mul[i]+'0');
start++;
}
mulChar[start]='\0';
return (string)mulChar;
}
//高精度加法
string operator+(const BigInteger &v)
{
string a=this->value;
string b=v.value;
int lengthA,lengthB,aInt[255]={0},bInt[255]={0},plus[255]={0};
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
lengthA=a.length();
lengthB=b.length();
for(int i=0;i<lengthA;i++)
{
aInt[i]=(int)(a[i]-'0');
}
for(int i=0;i<lengthB;i++)
{
bInt[i]=(int)(b[i]-'0');
}
//开始相加
for(int i=0;i<255;i++)
{
plus[i]=aInt[i]+bInt[i];
}
// 处理
for(int i=0;i<250;i++)
{
plus[i+1]+=(int)plus[i]/10;
plus[i]=plus[i]%10;
}
//把结果转化成字符串
char plusChar[255];
int mark=254;
while(plus[mark]==0)
mark--;
int start=0;
for(int i=mark;i>=0;i--)
{
plusChar[start]=(char)(plus[i]+'0');
start++;
}
plusChar[start]='\0';
return (string)plusChar;
}
//高精度判断
bool operator ==(const BigInteger &v)
{
string a=this->value;
string b=v.value;
string str1="true";
string str2="false";
return a==b;
}
//高精度减法
bool operator -(const BigInteger &v)
{
string a=this->value;
string b=v.value;
int lengthA,lengthB,aInt[205],bInt[205],mul[205]={0},mark,start;
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
lengthA=a.length();
lengthB=b.length();
for(int i=0;i<lengthA;i++)
{
aInt[i]=(int)(a[i]-'0');
}
for(int i=0;i<lengthB;i++)
{
bInt[i]=(int)(b[i]-'0');
}
}
};
int main()
{
BigInteger a, b;
while(true)
{
string str;
cin>>str;
//寻找执行什么操作
for(int i=0;i<str.length();i++)
{
if(str[i]=='*')
{
a.value=str.substr(0,i);
b.value=str.substr(i+1,str.length());
cout<<a*b<<endl; // 优先用成员函数
break;
}
if(str[i]=='+')
{
a.value=str.substr(0,i);
b.value=str.substr(i+1,str.length());
cout<<a+b<<endl; // 优先用成员函数
break;
}
if(str[i]=='=')
{
a.value=str.substr(0,i);
b.value=str.substr(i+2,str.length());
if(a==b)
cout<<"true"<<endl;
else
cout<<"false"<<endl;
break;
}
}
}
return 0;
}