我正在寫爲一個大的數字類的自定義碼運算(單數的無限lenghth)問題的除以定製大的數字類(C++)
使用多個遞減NUMER阿當A是由B出現故障除以比B更加粗糙。 我試圖實施書面分工,但是我發現它在我的情況下過於複雜。
我不能在字符串中存儲數字(這是項目的主要限制),所以我將它們存儲在int列表中的4位數組中。 我試圖把它看作整個4位數字結構在流行的書寫部門是一個單一的數字,但是我在執行過程中被重載/操作符丟失了。
我想得到一個提示,如果我正在做最後的主要部分分裂正確?如果在這個班級中進行劃分,我該如何改進方法?
struct Node{
int value;
Node* next,*prev;
};
class number {
public:
Node* head;
number(); //konstruktor domyślny
~number(); //destruktor
void addNode(string str); //dodanie nowego wezla na poczatek liczby
void addNode(int str); //dodanie nowego wezla na poczatek liczby (z wartosci int)
number& operator+(number& licz); //operator dodawania
number& operator-(number& licz); //operator odejmowania
bool operator>(number& licz); //operator porównania (czy a > b)
bool operator<(number& licz); //operator porównania (a mniejsze od b)
bool operator==(number& licz); //operator porównania (czy a równe b)
number& operator=(const number& licz); //operator przypisania
number& operator-(); //operator zamiany liczby na przeciwną
friend istream& operator>>(istream& input,number& li); //operator pobierania liczby
friend ostream& operator<<(ostream& s,number& li); //operator wypisania
void validate(); //funkcja usuwajaca zera z poczatku liczby
number& operator/(number& licz); //dzielenie calkowitoliczbowe
number& operator*(number& licz); //mnożenie
void pushNode(int str);
};
number& number::operator/(number& licz)
{
/////////cases of dividing//////
if (this->head->value<0 && licz.head->value<0) {
return (-(*this))/(-licz);
}
if (this->head->value<0 && licz.head->value>0) {
return -((-(*this))/licz);
}
if (this->head->value>0 && licz.head->value<0) {
return -(*this/(-licz));
}
number tmp_this=*this;
number tmp_licz=licz;
number zero;
zero.addNode(0);
//dividing by zero//
if (licz==zero) {
cout<<"dividing by zero"<<endl;
number* t=new number;
t->addNode(0);
return *t;
}
//dividing zero by sth ///
if (*this==zero) {
number* t=new number;
t->addNode(0);
return *t;
}
number i,jeden;
i.addNode(0);
jeden.addNode(1);
if (licz == jeden) {
return *this;
}
/// here real mess start///
string pl="";
number* tmp=new number;
Node* p=this->head,*q=licz.head;
tmp->pushNode(q->value);
while (p && *tmp < licz) {
p=p->next;
tmp->pushNode(p->value);
}
number* wynik=new number;
wynik=tmp;
int j;
while (*wynik > zero || *wynik==zero) {
*wynik=*wynik-tmp_licz;
j++;
}
char* str;
sprintf(str, "%d", j);
///end od mess///
};
這裏有一個問題,甚至是一個問題的說明嗎? – Blazes
+1 @Blazes。如果沒有'?',這不是一個問題。 –
沒有回答你的「問題」,你的代碼的一個問題就是你返回的東西的方式:每個'new'在堆上分配空間,永遠不會再次釋放!內存泄漏。 'operator /'必須按值返回。 – leftaroundabout