不过其实是因为我已经完全昏了头不知道怎么使用简洁的算法了......好吧继续.....
#include<iostream.h>
#include<string>
#include<iomanip>
using namespace std;
class bignum
{
public:
bignum(string m); //构造大数
void display();
bignum operator + (bignum a2); //+重载
bignum operator - (bignum a2); //-重载
bignum operator ++ (); //++重载
bignum operator ++ (int); //++后置重载
private:
int length; //大数的位数
int a[1000]; //定义数组存储大数
};
bignum::bignum(string m)
{
length=m.length(); //获得位数
for (int i=0;i<length;i++)
{
a[i]=(int)m[length-1-i]-48; //类型转换
}
}
void bignum::display()
{
if (a[length-1]>0)
{
for (int i=0;i<length;i++)
{
cout<<a[length-1-i];
}
cout<<endl;
}
else if (a[length-1]==0)
{
cout<<'-';
for (int i=0;i<length-2;i++)
{
cout<<a[length-2-i];
}
cout<<endl;
}
else if (a[length-1]==-1)
{
cout<<'-';
for (int i=0;i<length-2;i++)
{
cout<<10-a[length-2-i]-1;
}
cout<<10-a[0]<<endl;
}
else if (a[length-1]<-1)
{
cout<<'-';
cout<<-a[length-1]-1;
for (int i=0;i<length-2;i++)
{
cout<<10-a[length-2-i]-1;
}
cout<<10-a[0]<<endl;
}
}
bignum bignum::operator ++() //实现大数自加运算重载
{
a[0]+=1;
int m=0;
for (int i=0 i<length i++) //循环检查是否需要进位
{
if (a[i]==9) m++; //通过m的值判断是否每一位都是9
if (a[i]>9) {a[i]-=10 a[i+1]+=1 }
}
if (m==length) {length++ a[length-1]=1;}
return *this;
}
bignum bignum::operator ++(int)
{
a[0]++;
int m=0;
for (int i=0 i<length i++) //循环检查是否需要进位
{
if (a[i]==9) m++; //通过m的值判断是否每一位都是9
if (a[i]>9) {a[i]-=10 a[i+1]+=1 }
}
if (m==length) {length++ a[length-1]=1;}
return *this;
}
bignum bignum::operator + (bignum a2) //实现大数加法运算重载
{
int m,n;
bignum a3("0");
m=(length>a2.length ? length : a2.length);
n=(length<a2.length ? length : a2.length);
#include<iostream.h>
#include<string>
#include<iomanip>
using namespace std;
class bignum
{
public:
bignum(string m); //构造大数
void display();
bignum operator + (bignum a2); //+重载
bignum operator - (bignum a2); //-重载
bignum operator ++ (); //++重载
bignum operator ++ (int); //++后置重载
private:
int length; //大数的位数
int a[1000]; //定义数组存储大数
};
bignum::bignum(string m)
{
length=m.length(); //获得位数
for (int i=0;i<length;i++)
{
a[i]=(int)m[length-1-i]-48; //类型转换
}
}
void bignum::display()
{
if (a[length-1]>0)
{
for (int i=0;i<length;i++)
{
cout<<a[length-1-i];
}
cout<<endl;
}
else if (a[length-1]==0)
{
cout<<'-';
for (int i=0;i<length-2;i++)
{
cout<<a[length-2-i];
}
cout<<endl;
}
else if (a[length-1]==-1)
{
cout<<'-';
for (int i=0;i<length-2;i++)
{
cout<<10-a[length-2-i]-1;
}
cout<<10-a[0]<<endl;
}
else if (a[length-1]<-1)
{
cout<<'-';
cout<<-a[length-1]-1;
for (int i=0;i<length-2;i++)
{
cout<<10-a[length-2-i]-1;
}
cout<<10-a[0]<<endl;
}
}
bignum bignum::operator ++() //实现大数自加运算重载
{
a[0]+=1;
int m=0;
for (int i=0 i<length i++) //循环检查是否需要进位
{
if (a[i]==9) m++; //通过m的值判断是否每一位都是9
if (a[i]>9) {a[i]-=10 a[i+1]+=1 }
}
if (m==length) {length++ a[length-1]=1;}
return *this;
}
bignum bignum::operator ++(int)
{
a[0]++;
int m=0;
for (int i=0 i<length i++) //循环检查是否需要进位
{
if (a[i]==9) m++; //通过m的值判断是否每一位都是9
if (a[i]>9) {a[i]-=10 a[i+1]+=1 }
}
if (m==length) {length++ a[length-1]=1;}
return *this;
}
bignum bignum::operator + (bignum a2) //实现大数加法运算重载
{
int m,n;
bignum a3("0");
m=(length>a2.length ? length : a2.length);
n=(length<a2.length ? length : a2.length);