مشكل در عملگر + در كلاس Int
سلام
كد زير كلاس Int (اعداد بزرگ) هست كه من به عملگر + رو بعد از چقدر كار كردن روش براش نوشتم ولي اين عملگر يه مشكل داره كه هر كاريش كردم نتونستم برطرفش كنم لطفا به من كمك كنيد تا مشكل اين كد رو حل كنم.
مشكلش اينه كه اگه بخوايم عددهايي از جمله 99 و 1 رو باهم جمع كنيم اين كار انجام نميشه و در خروجي چيزي چاپ نميشه و حالا اگر بيايمو دو حلقه ي while كه در عملگر + وجود دارند رو حذف كنيم و پس از اون اعدادي از جمله 998 و 2 رو باهم جمه كنيم در خروجي بجاي 1000 سه تا صفر چاپ ميشه فكر كنم فهميده باشيد مشكل از كجاست(كه در اين مورد جمع ها اگه بخواد يك كاركتر كه هميشه يك خواهد بود اضافه بشه يعني 998 كه سه كاركتر داره به 1000 كه چهار تا داره تغيير كنه مشكل داريم)و من به همين علت حلقه ي while رو اضافه كردم ولي مشكل حل نشد.
کد:
#include <iostream>
using namespace std;
typedef int UI;
typedef char cint;
class Int
{
public:
Int():itsBigNumber(0),itsTemp(0){}
Int(char*);
~Int();
Int operator = (Int rhs);
UI operator [] (int offset) { return itsBigNumber[offset]; }
UI* GetInt() const { return itsBigNumber; }
Int operator + (Int);
friend ostream operator <<(ostream os,Int big)
{
for(int i=0;i<big.itsTemp;i++)
os <<(big.GetInt())[i];
os <<endl;
return os;
}
private:
UI* itsBigNumber;
int itsTemp;
};
Int::Int(char* big)
{
int itsLen = itsTemp = strlen(big);
itsBigNumber = new UI[itsLen];
for(int i=0;i<itsLen;i++)
itsBigNumber[i] = big[i]-'0';
}
Int Int::operator = (Int rhs)
{
if(this == &rhs)
return *this;
delete [] itsBigNumber;
this->itsTemp = rhs.itsTemp;
this->itsBigNumber = new UI[rhs.itsTemp];
for(int i=0;i<rhs.itsTemp;i++)
itsBigNumber[i] = rhs[i];
return *this;
}
Int Int::operator + (Int num)
{
int carry = 0;
if(this->itsTemp > num.itsTemp)
{
for(int i = this->itsTemp,j = num.itsTemp;
i >= 0 && j >= 0;i--,j--)
{
if(this->itsBigNumber[i] + num.itsBigNumber[j] + carry > 9)
{
int item = (this->itsBigNumber[i] +
num.itsBigNumber[j])- 10;
this->itsBigNumber[i] = item + carry;
carry = 1;
if(j == 0)
{
num.itsBigNumber[j] = 0;
j = 1;
}
}
else
if(this->itsBigNumber[i] +
num.itsBigNumber[j] + carry <= 9)
{
this->itsBigNumber[i] =
this->itsBigNumber[i] + num.itsBigNumber[j]
+ carry;
carry = 0;
if(j == 0)
{
num.itsBigNumber[j] = 0;
j = 1;
}
}
while(carry && !i)
{
Int item = *this;
delete [] this->itsBigNumber;
this->itsBigNumber = 0;
this->itsTemp = 0;
int len = item.itsTemp;
this->itsTemp = len+1;
this->itsBigNumber[0] = 1;
for(int k = len;k >= 0;k--)
this->itsBigNumber[k+1] =
item.itsBigNumber[k];
carry = 0;
}
}
return *this;
}
else
{
for(int i = num.itsTemp;i >= 0;i--)
{
if(num.itsBigNumber[i] + this->itsBigNumber[i] > 9)
{
int item = (num.itsBigNumber[i] +
this->itsBigNumber[i])- 10;
this->itsBigNumber[i] = item + carry;
carry = 1;
}
else
if(num.itsBigNumber[i] + this->itsBigNumber[i] <= 9)
{
this->itsBigNumber[i] = num.itsBigNumber[i]
+ this->itsBigNumber[i] + carry;
carry = 0;
}
else
if( i = 0 && num.itsBigNumber[i] +
this->itsBigNumber[i] > 9)
{
this->itsTemp++;
int item = (num.itsBigNumber[i] +
this->itsBigNumber[i]) - 10;
this->itsBigNumber[i] = item + carry;
carry = 1;
}
while(carry && !i)
{
Int item = *this;
delete [] this->itsBigNumber;
this->itsBigNumber = 0;
this->itsTemp = 0;
int len = item.itsTemp;
this->itsTemp = len+1;
this->itsBigNumber[0] = 1;
for(int k = len;k >= 0;k--)
this->itsBigNumber[k+1] =
item.itsBigNumber[k];
carry = 0;
}
}
return *this;
}
}
Int::~Int()
{
delete [] itsBigNumber;
itsBigNumber = 0;
itsTemp = 0;
}
int main()
{
cint one[20000],two[20000];
cout <<"one(enter the bigest):";
cin.getline(one,19999);
cout <<"\ntwo:";
cin.getline(two,19999);
Int One = one;
Int Two = two;
Int Three = One + Two;
cout <<"\n-->\t"<<Three;
return 0;
}