设计一个超长整数类

本人是代码小白,我在这提供的程序肯定会有很多的bug,希望路过的各位大牛可以做一些斧正点!非常感谢!

这一题部分功能未完成。

  1. 定义并实现超长整数类doublelong,要求如下:
    1. 64位数据长度,有符号
    2. 支持+、-、*、/运算
    3. 支持+=、-=、/=运算
    4. 支持cin>>和cout<<操作

这一题我拿到的第一个想法就是这是一个64位的二进制数还是一个十进制数?

我的想法就是一个十进制数。然后一直都是按照这种方法来做的。但是实习老师说是二进制,emmm,给我整emo了。 

1.这个64位的数字不能直接定义吧,基本类型里承受不了这么大的数。

2.我就想使用字符串表示这个大长数字吧,但是也只能表示绝对值部分,题目要求还应该带有符号,这要求我们在输入的时候就把符号输进去无论这个数字是不是一个正数都要有符号(‘+’&‘-’)。

3.对于二目运算符+和-的左右操作数都分为“++”“+-”“-+”“--”四个部分。

然后对于可能越位的结果设置一个offside的标志位offside=1表示越位,offside=0表示不越位。

4.对cin和cout的操作是最基本的操作,没有这两个操作就无法实现+和-。

5.这一题的未完成的点就是不知道该如何实现*和/的相关操作

上代码:

//定义并实现超长整数类doublelong,要求如下:
//64位数据长度,有符号
//支持+、-、*、/运算
//支持+=、-=、/=运算
//支持cin>>和cout<<操作
/*
首先64位规定存储的是一个十进制的数字,这里主要是利用字符串来实现 
*/
#include<iostream>
#include<string>
#include"math.h"
using namespace std;
class doublelong{
	 private:
	string s;//doublelong类型的数字 
	int size;//数字的长度 
	char flag;//数字的符号 
	int offside;//判断是否越位 
	public:
		doublelong(){
			offside=0;
		}
/*		double(string str,int longth,char fl){
			s=str;
			size=longth;
			flag=fl;
		}*/
		~doublelong(){
			
		}
		friend ostream& operator <<(ostream& output,doublelong&);
		friend istream& operator >>(istream& input,doublelong&);
		doublelong operator +(doublelong&);
		doublelong operator -(doublelong&);
//		doublelong operator *(doublelong&);
//		doublelong operator /(doublelong&);
		doublelong operator +=(doublelong&);
		doublelong operator -=(doublelong&);
/*		doublelong operator /=(doublelong&);*/
};
//比较长整型的大小 
bool compare(string s1,string s2){
	int i;
	for(i=0;i<s1.size();i++){
		if((s1[i]-'0')!=(s2[i]-'0')){
			break;
		}
	}
	if(i<s1.size()){
		if((s1[i]-'0')>(s2[i]-'0'))
		return true;
		else
		return false;
	}
	return false;
}
ostream& operator <<(ostream& output,doublelong& d){
	if(d.offside==1){
		if(d.flag=='-'){
		return output<<"-1"<<d.s<<endl;
		}
		else{
		return output<<"1"<<d.s<<endl;
		}
	}
	else{ 
		if(d.flag=='-'){
		return output<<"-"<<d.s<<endl;
		}
		else{
		return output<<d.s<<endl;
		}
	}
	
}
istream& operator >>(istream& input,doublelong& d){
	return input>>d.flag>>d.s;
}
//加法重载的实现 
doublelong doublelong::operator +(doublelong &d2){
	doublelong d;
	char med[64];
	int s1=s.size();
	int s2=d2.s.size();
	if(flag=='+'){
		//++
		if(d2.flag=='+'){
			if(s1>s2){
				int side[64];
				for(int i=0;i<s1;i++){
					side[i]=0;
				}
				for(int i=s2-1,j=s1-1;i>=0;i--,j--){
					if((s[j]-'0'+d2.s[i]-'0'+side[j])<10){
						med[j]=s[j]-'0'+d2.s[i]-'0'+side[j]+'0';
						//cout<<"med["<<j<<"]:"<<med[j]<<" s["<<j<<"]:"<<side[j]<<endl;
					}
					else{
						med[j]=(s[j]-'0'+d2.s[i]-'0'+side[j])%10+'0';
					//	cout<<"med["<<j<<"]:"<<med[j]<<" s["<<j<<"]:"<<side[j]<<endl;
					 	side[j-1]=1;
					}
				}
				for(int i=((s1-s2)-1);i>=0;i--){
					if(i==0&&side[i]==1){
							d.offside=1;
					}
					else{
						if((s[i]-'0'+side[i])<10){
						med[i]=s[i]-'0'+side[i]+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(s[i]-'0'+side[i])%10+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					 	side[i-1]=1;
					}
					}
				}
				med[s1]='\0';
			}
			else if(s1<s2){
				int side[64];
				for(int i=0;i<s2;i++){
					side[i]=0;
				}
				for(int i=s2-1,j=s1-1;j>=0;i--,j--){
					if((s[j]-'0'+d2.s[i]-'0'+side[i])<10){
						med[i]=s[j]-'0'+d2.s[i]-'0'+side[i]+'0';
						//cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					}
					else{        
						med[i]=(s[j]-'0'+d2.s[i]-'0'+side[i])%10+'0';
						//cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					 	side[i-1]=1;
					}
				}
				for(int i=((s2-s1)-1);i>=0;i--){
					if(i==0&&side[i]==1){
							d.offside=1;
					}
					else{
						if((d2.s[i]-'0'+side[i])<10){
						med[i]=d2.s[i]-'0'+side[i]+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(d2.s[i]-'0'+side[i])%10+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					 	side[i-1]=1;
					}
					}
				}
				med[s2]='\0';
			}
			else{
				int side[64];
				for(int i=0;i<s2;i++){
					side[i]=0;
				}
				for(int i=s2-1;i>=0;i--){
					if((s[i]-'0'+d2.s[i]-'0'+side[i])<10){
						med[i]=s[i]-'0'+d2.s[i]+side[i];
					}
					else{
						if(i==0){
							d.offside=1;
						}
						else{
							side[i-1]=1;
						}
						med[i]=(s[i]-'0'+d2.s[i]-'0'+side[i])%10+'0';
					}
				}
				med[s1]='\0';
			d.flag='+';
			}
		}
		//+-
		else{
			if(s1>s2){
				int side[64];
				for(int i=0;i<s1;i++)
				side[i]=0;
				for(int i=s1-1,j=s2-1;j>=0;i--,j--){
					if((s[i]-'0'+side[i])<(d2.s[j]-'0')){
						side[i-1]=-1;
						med[i]=(s[i]-'0'+side[i])+10-(d2.s[j]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(s[i]-'0'+side[i])-(d2.s[j]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
				}
				for(int i=(s1-s2-1);i>=0;i--){
					med[i]=s[i]-'0'+side[i]+'0';
				}
				med[s1]='\0';
			}
			else if(s1<s2){
				int side[64];
				for(int i=0;i<s2;i++)
				side[i]=0;
				for(int i=s1-1,j=s2-1;i>=0;i--,j--){
					if((s[i]-'0')>(d2.s[j]-'0'+side[j])){
						side[j-1]=-1;
						med[j]=(d2.s[j]-'0'+side[j])+10-(s[i]-'0')+'0';
					//	cout<<"med["<<j<<"]:"<<med[j]<<" side["<<j<<"]:"<<side[j]<<endl;
					}
					else{
						med[j]=(d2.s[j]-'0'+side[j])-(s[i]-'0')+'0';
					//	cout<<"med["<<j<<"]:"<<med[j]<<" side["<<j<<"]:"<<side[j]<<endl;
					}
				}
				for(int i=(s2-s1-1);i>=0;i--){
					med[i]=d2.s[i]-'0'+side[i]+'0';
				}
				d.flag='-';
				med[s2]='\0';
			}
			else{
				int side[64];
				for(int i=0;i<s2;i++)
				side[i]=0;
				if(compare(s,d2.s)){//如果为真则d1>d2 
					for(int i=s1-1,j=s2-1;j>=0;i--,j--){
					if((s[i]-'0'+side[i])<(d2.s[j]-'0')){
						side[i-1]=-1;
						med[i]=(s[i]-'0'+side[i])+10-(d2.s[j]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(s[i]-'0'+side[i])-(d2.s[j]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
				}
				med[s1]='\0';
				}
				else{
					for(int i=s1-1,j=s2-1;j>=0;i--,j--){
					if((d2.s[j]-'0'+side[i])<(s[i]-'0')){
						side[i-1]=-1;
						med[i]=(d2.s[j]-'0'+side[i])+10-(s[i]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(d2.s[j]-'0'+side[i])-(s[i]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
				}
				d.flag='-';
			}
		}
	}
}
	else{
		//-+
		if(d2.flag=='+'){
			if(s1>s2){
				int side[64];
				for(int i=0;i<s1;i++)
				side[i]=0;
				for(int i=s1-1,j=s2-1;j>=0;i--,j--){
					if((s[i]-'0'+side[i])<(d2.s[j]-'0')){
						side[i-1]=-1;
						med[i]=(s[i]-'0'+side[i])+10-(d2.s[j]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(s[i]-'0'+side[i])-(d2.s[j]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
				}
				for(int i=(s1-s2-1);i>=0;i--){
					med[i]=s[i]-'0'+side[i]+'0';
				}
				d.flag='-';
				med[s1]='\0';
			}
			else if(s1<s2){
				int side[64];
				for(int i=0;i<s2;i++)
				side[i]=0;
				for(int i=s1-1,j=s2-1;i>=0;i--,j--){
					if((d2.s[j]-'0'+side[i])<(s[i]-'0')){
						side[j-1]=-1;
						med[j]=(d2.s[j]-'0'+side[j])+10-(s[i]-'0')+'0';
					//	cout<<"med["<<j<<"]:"<<med[j]<<" side["<<j<<"]:"<<side[j]<<endl;
					}
					else{
						med[j]=(d2.s[j]-'0'+side[i])-(s[i]-'0')+'0';
					//	cout<<"med["<<j<<"]:"<<med[j]<<" side["<<j<<"]:"<<side[j]<<endl;
					}
				}
				for(int i=(s2-s1-1);i>=0;i--){
					med[i]=d2.s[i]-'0'+side[i]+'0';
				}
				d.flag='+';
				med[s2]='\0';
			}
			else{
				int side[64];
				for(int i=0;i<s2;i++)
				side[i]=0;
				if(compare(s,d2.s)){//如果为真则d1>d2 
					for(int i=s1-1,j=s2-1;j>=0;i--,j--){
					if((s[i]-'0'+side[i])<(d2.s[j]-'0')){
						side[i-1]=-1;
						med[i]=(s[i]-'0'+side[i])+10-(d2.s[j]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(s[i]-'0'+side[i])-(d2.s[j]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
				}
				d.flag='-';
				med[s1]='\0';
				}
				else{
					for(int i=s1-1,j=s2-1;j>=0;i--,j--){
					if((d2.s[j]-'0'+side[i])<(s[i]-'0')){
						side[i-1]=-1;
						med[i]=(d2.s[j]-'0'+side[i])+10-(s[i]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(d2.s[j]-'0'+side[i])-(s[i]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
				}
			}
		}
	}
		//--
		else{
			if(s1>s2){
				int side[64];
				for(int i=0;i<s1;i++){
					side[i]=0;
				}
				for(int i=s2-1,j=s1-1;i>=0;i--,j--){
					if((s[j]-'0'+d2.s[i]-'0'+side[j])<10){
						med[j]=s[j]-'0'+d2.s[i]-'0'+side[j]+'0';
					//	cout<<"med["<<j<<"]:"<<med[j]<<" s["<<j<<"]:"<<side[j]<<endl;
					}
					else{
						med[j]=(s[j]-'0'+d2.s[i]-'0'+side[j])%10+'0';
					//	cout<<"med["<<j<<"]:"<<med[j]<<" s["<<j<<"]:"<<side[j]<<endl;
					 	side[j-1]=1;
					}
				}
				for(int i=((s1-s2)-1);i>=0;i--){
					if(i==0&&side[i]==1){
					//	cout<<"offside:"<<endl;
							d.offside=1;
					}
					else{
						if((s[i]-'0'+side[i])<10){
						med[i]=s[i]-'0'+side[i]+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(s[i]-'0'+side[i])%10+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					 	side[i-1]=1;
					}
					}
				}
				med[s1]='\0';
				d.flag='-';
			}
			else if(s1<s2){
				int side[64];
				for(int i=0;i<s2;i++){
					side[i]=0;
				}
				for(int i=s2-1,j=s1-1;j>=0;i--,j--){
					if((s[j]-'0'+d2.s[i]-'0'+side[i])<10){
						med[i]=s[j]-'0'+d2.s[i]-'0'+side[i]+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(s[j]-'0'+d2.s[i]-'0'+side[i])%10+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					 	side[i-1]=1;
					}
				}
				for(int i=((s2-s1)-1);i>=0;i--){
					if(i==0&&side[i]==1){
							d.offside=1;
					}
					else{
						if((d2.s[i]-'0'+side[i])<10){
						med[i]=d2.s[i]-'0'+side[i]+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(d2.s[i]-'0'+side[i])%10+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					 	side[i-1]=1;
					}
					}
				}
				med[s2]='\0';
				d.flag='-';
			}
			else{
				int side[64];
				for(int i=0;i<s2;i++){
					side[i]=0;
				}
				for(int i=s2-1;i>=0;i--){
					if((s[i]-'0'+d2.s[i]-'0'+side[i])<10){
						med[i]=s[i]-'0'+d2.s[i]+side[i];
					}
					else{
						if(i==0){
						//	cout<<"off"<<endl;
							d.offside=1;
						}
						else{
							side[i-1]=1;
						}
						med[i]=(s[i]-'0'+d2.s[i]-'0'+side[i])%10+'0';
					}
				}
				med[s1]='\0';
			d.flag='-';
			}
		}
	}
	d.s+=med;
	return d;
}
//减法重载的实现
doublelong doublelong::operator -(doublelong &d2){
	doublelong d;
	char med[64];
	int s1=s.size();
	int s2=d2.s.size();
	//第一个数为正 
	if(flag=='+'){
		//++
		if(d2.flag=='+'){
			if(s1>s2){
				int side[64];
				for(int i=0;i<s1;i++)
				side[i]=0;
				for(int i=s1-1,j=s2-1;j>=0;i--,j--){
					if((s[i]-'0'+side[i])<(d2.s[j]-'0')){
						side[i-1]=-1;
						med[i]=(s[i]-'0'+side[i])+10-(d2.s[j]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(s[i]-'0'+side[i])-(d2.s[j]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
				}
				for(int i=(s1-s2-1);i>=0;i--){
					med[i]=s[i]-'0'+side[i]+'0';
				}
				med[s1]='\0';
			}
			else if(s1<s2){
				int side[64];
				for(int i=0;i<s2;i++)
				side[i]=0;
				for(int i=s1-1,j=s2-1;i>=0;i--,j--){
					if((s[i]-'0')>(d2.s[j]-'0'+side[j])){
						side[j-1]=-1;
						med[j]=(d2.s[j]-'0'+side[j])+10-(s[i]-'0')+'0';
					//	cout<<"med["<<j<<"]:"<<med[j]<<" side["<<j<<"]:"<<side[j]<<endl;
					}
					else{
						med[j]=(d2.s[j]-'0'+side[j])-(s[i]-'0')+'0';
					//	cout<<"med["<<j<<"]:"<<med[j]<<" side["<<j<<"]:"<<side[j]<<endl;
					}
				}
				for(int i=(s2-s1-1);i>=0;i--){
					med[i]=d2.s[i]-'0'+side[i]+'0';
				}
				d.flag='-';
				med[s2]='\0';
			}
			else{
				int side[64];
				for(int i=0;i<s2;i++)
				side[i]=0;
				if(compare(s,d2.s)){//如果为真则d1>d2 
					for(int i=s1-1,j=s2-1;j>=0;i--,j--){
					if((s[i]-'0'+side[i])<(d2.s[j]-'0')){
						side[i-1]=-1;
						med[i]=(s[i]-'0'+side[i])+10-(d2.s[j]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(s[i]-'0'+side[i])-(d2.s[j]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
				}
				med[s1]='\0';
				}
				else{
					for(int i=s1-1,j=s2-1;j>=0;i--,j--){
					if((d2.s[j]-'0'+side[i])<(s[i]-'0')){
						side[i-1]=-1;
						med[i]=(d2.s[j]-'0'+side[i])+10-(s[i]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(d2.s[j]-'0'+side[i])-(s[i]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
				}
				d.flag='-';
			}
			}
			}
		//+-
		else{
			if(s1>s2){
				int side[64];
				for(int i=0;i<s1;i++){
					side[i]=0;
				}
				for(int i=s2-1,j=s1-1;i>=0;i--,j--){
					if((s[j]-'0'+d2.s[i]-'0'+side[j])<10){
						med[j]=s[j]-'0'+d2.s[i]-'0'+side[j]+'0';
					//	cout<<"med["<<j<<"]:"<<med[j]<<" s["<<j<<"]:"<<side[j]<<endl;
					}
					else{
						med[j]=(s[j]-'0'+d2.s[i]-'0'+side[j])%10+'0';
					//	cout<<"med["<<j<<"]:"<<med[j]<<" s["<<j<<"]:"<<side[j]<<endl;
					 	side[j-1]=1;
					}
				}
				for(int i=((s1-s2)-1);i>=0;i--){
					if(i==0&&side[i]==1){
							d.offside=1;
					}
					else{
						if((s[i]-'0'+side[i])<10){
						med[i]=s[i]-'0'+side[i]+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(s[i]-'0'+side[i])%10+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					 	side[i-1]=1;
					}
					}
				}
				med[s1]='\0';
			}
			else if(s1<s2){
				int side[64];
				for(int i=0;i<s2;i++){
					side[i]=0;
				}
				for(int i=s2-1,j=s1-1;j>=0;i--,j--){
					if((s[j]-'0'+d2.s[i]-'0'+side[i])<10){
						med[i]=s[j]-'0'+d2.s[i]-'0'+side[i]+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					}
					else{        
						med[i]=(s[j]-'0'+d2.s[i]-'0'+side[i])%10+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					 	side[i-1]=1;
					}
				}
				for(int i=((s2-s1)-1);i>=0;i--){
					if(i==0&&side[i]==1){
							d.offside=1;
					}
					else{
						if((d2.s[i]-'0'+side[i])<10){
						med[i]=d2.s[i]-'0'+side[i]+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(d2.s[i]-'0'+side[i])%10+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					 	side[i-1]=1;
					}
					}
				}
				med[s2]='\0';
			}
			else{
				int side[64];
				for(int i=0;i<s2;i++){
					side[i]=0;
				}
				for(int i=s2-1;i>=0;i--){
					if((s[i]-'0'+d2.s[i]-'0'+side[i])<10){
						med[i]=s[i]-'0'+d2.s[i]+side[i];
					}
					else{
						if(i==0){
							d.offside=1;
						}
						else{
							side[i-1]=1;
						}
						med[i]=(s[i]-'0'+d2.s[i]-'0'+side[i])%10+'0';
					}
				}
				med[s1]='\0';
			d.flag='+';
			}
		}
	}
	//第一个数为负 
	else{
		//-+
		if(d2.flag=='+'){
			if(s1>s2){
				int side[64];
				for(int i=0;i<s1;i++){
					side[i]=0;
				}
				for(int i=s2-1,j=s1-1;i>=0;i--,j--){
					if((s[j]-'0'+d2.s[i]-'0'+side[j])<10){
						med[j]=s[j]-'0'+d2.s[i]-'0'+side[j]+'0';
					//	cout<<"med["<<j<<"]:"<<med[j]<<" s["<<j<<"]:"<<side[j]<<endl;
					}
					else{
						med[j]=(s[j]-'0'+d2.s[i]-'0'+side[j])%10+'0';
					//	cout<<"med["<<j<<"]:"<<med[j]<<" s["<<j<<"]:"<<side[j]<<endl;
					 	side[j-1]=1;
					}
				}
				for(int i=((s1-s2)-1);i>=0;i--){
					if(i==0&&side[i]==1){
					//	cout<<"offside:"<<endl;
							d.offside=1;
					}
					else{
						if((s[i]-'0'+side[i])<10){
						med[i]=s[i]-'0'+side[i]+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(s[i]-'0'+side[i])%10+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					 	side[i-1]=1;
					}
					}
				}
				med[s1]='\0';
				d.flag='-';
			}
			else if(s1<s2){
				int side[64];
				for(int i=0;i<s2;i++){
					side[i]=0;
				}
				for(int i=s2-1,j=s1-1;j>=0;i--,j--){
					if((s[j]-'0'+d2.s[i]-'0'+side[i])<10){
						med[i]=s[j]-'0'+d2.s[i]-'0'+side[i]+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(s[j]-'0'+d2.s[i]-'0'+side[i])%10+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					 	side[i-1]=1;
					}
				}
				for(int i=((s2-s1)-1);i>=0;i--){
					if(i==0&&side[i]==1){
							d.offside=1;
					}
					else{
						if((d2.s[i]-'0'+side[i])<10){
						med[i]=d2.s[i]-'0'+side[i]+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(d2.s[i]-'0'+side[i])%10+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" s["<<i<<"]:"<<side[i]<<endl;
					 	side[i-1]=1;
					}
					}
				}
				med[s2]='\0';
				d.flag='-';
			}
			else{
				int side[64];
				for(int i=0;i<s2;i++){
					side[i]=0;
				}
				for(int i=s2-1;i>=0;i--){
					if((s[i]-'0'+d2.s[i]-'0'+side[i])<10){
						med[i]=s[i]-'0'+d2.s[i]+side[i];
					}
					else{
						if(i==0){
						//	cout<<"off"<<endl;
							d.offside=1;
						}
						else{
							side[i-1]=1;
						}
						med[i]=(s[i]-'0'+d2.s[i]-'0'+side[i])%10+'0';
					}
				}
				med[s1]='\0';
			d.flag='-';
			}
		}
		//--
		else{
			if(s1>s2){
				int side[64];
				for(int i=0;i<s1;i++)
				side[i]=0;
				for(int i=s1-1,j=s2-1;j>=0;i--,j--){
					if((s[i]-'0'+side[i])<(d2.s[j]-'0')){
						side[i-1]=-1;
						med[i]=(s[i]-'0'+side[i])+10-(d2.s[j]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(s[i]-'0'+side[i])-(d2.s[j]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
				}
				for(int i=(s1-s2-1);i>=0;i--){
					med[i]=s[i]-'0'+side[i]+'0';
				}
				d.flag='-';
				med[s1]='\0';
			}
			else if(s1<s2){
				int side[64];
				for(int i=0;i<s2;i++)
				side[i]=0;
				for(int i=s1-1,j=s2-1;i>=0;i--,j--){
					if((d2.s[j]-'0'+side[i])<(s[i]-'0')){
						side[j-1]=-1;
						med[j]=(d2.s[j]-'0'+side[j])+10-(s[i]-'0')+'0';
					//	cout<<"med["<<j<<"]:"<<med[j]<<" side["<<j<<"]:"<<side[j]<<endl;
					}
					else{
						med[j]=(d2.s[j]-'0'+side[i])-(s[i]-'0')+'0';
					//	cout<<"med["<<j<<"]:"<<med[j]<<" side["<<j<<"]:"<<side[j]<<endl;
					}
				}
				for(int i=(s2-s1-1);i>=0;i--){
					med[i]=d2.s[i]-'0'+side[i]+'0';
				}
				d.flag='+';
				med[s2]='\0';
			}
			else{
				int side[64];
				for(int i=0;i<s2;i++)
				side[i]=0;
				if(compare(s,d2.s)){//如果为真则d1>d2 
					for(int i=s1-1,j=s2-1;j>=0;i--,j--){
					if((s[i]-'0'+side[i])<(d2.s[j]-'0')){
						side[i-1]=-1;
						med[i]=(s[i]-'0'+side[i])+10-(d2.s[j]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(s[i]-'0'+side[i])-(d2.s[j]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
				}
				d.flag='-';
				med[s1]='\0';
				}
				else{
					for(int i=s1-1,j=s2-1;j>=0;i--,j--){
					if((d2.s[j]-'0'+side[i])<(s[i]-'0')){
						side[i-1]=-1;
						med[i]=(d2.s[j]-'0'+side[i])+10-(s[i]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
					else{
						med[i]=(d2.s[j]-'0'+side[i])-(s[i]-'0')+'0';
					//	cout<<"med["<<i<<"]:"<<med[i]<<" side["<<i<<"]:"<<side[i]<<endl;
					}
				}
			}
		}
	}
	
}
	d.s+=med;
//	cout<<"med:"<<med<<endl;
//	cout<<"d:"<<d.s<<endl;
	return d;
}
int main(){
	doublelong d1,d2;
	cout<<"请输入第一个doublelong的数字和它的符号"<<endl;
	cin>>d1;
	cout<<"请输入第二个doublelong的数字和它的符号"<<endl;
	cin>>d2;
	cout<<"d1:"<<d1<<"d2:"<<d2<<endl; 
	cout<<"两者相加为:"<<endl;
	doublelong d3;
	d3=d1+d2;
	cout<<d3<<endl;
	cout<<"两者相减为:"<<endl;
	d3=d1-d2;
	cout<<d3<<endl;
/*	cout<<"两者相乘为:"<<endl;
	cout<<d1*d2<<endl;
	cout<<"两者相除为:"<<endl;
	cout<<d1/d2<<endl;*/
	cout<<"实现+=运算:"<<endl;
	d3=d1+d2;
	cout<<d3<<endl;
	cout<<"实现-=运算:"<<endl;
	d3=d1-d2;
	cout<<d3<<endl;
//	cout<<"实现/=运算:"<<endl;
/*	cout<<d1/=d2<<endl;*/
	return 0;
}

运行结果:

 

 

 

 

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明璐花生牛奶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值