用C++的类重载高精度加法,乘法和等于符号

运行结果:

代码如下:

#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;
}

猜你喜欢

转载自blog.csdn.net/cysisu/article/details/82947336