2012-05-23 53 views
1

我的問題是,我不知道如何總結巨大的數字(如「172839023498234792834798237494」或「-172839023498234792834798237494」)。所以我做了char* m_value,我將存放這種物體。現在我想要做的是做一些基本的算術運算。我應該首先轉換它還是使用一些像itoa?在我的情況下,沒有其他選項,然後char *來存儲數字。如何加減char *號碼?

Main.cpp的

int main(int argc, char *argv[]) 
{ 
    LargeNumber l1; 
    LargeNumber l3("172839023498234792834798237494"); 
    LargeNumber l7("-172839023498234792834798237494"); 

    l1 = l3 + l7; //How to do it ? 

    return 0; 
} 

LargeNumber.h

class LargeNumber{ 

     public: 
     LargeNumber(char* value):m_value(value) 
     {} 

     LargeNumber operator+(const LargeNumber&); 
     private: 
     char* m_value; 
} 

LargeNumber.cpp

LargeNumber LargeNumber ::operator+(const LargeNumber &b) 
{ 
     return LargeNumber (...); //Sum both LargeNumber ??? 
} 
+0

l1 = l3 + l7應該是l1 = l3 + * l7 – cppguy

+2

作業問題? – rburhum

+0

處理器無法處理大數字。你將不得不編寫一個花哨的算法來處理它,並將其重構爲char *。 –

回答

4

您將需要使用一拉數字運算庫。 GMP是一個不錯的選擇。你的處理器不能在本機上對這個大小的數字執行操作,所以這些庫在軟件中爲你處理所有的老派數學。

3

不要重新發明whell,你應該使用BigInteger庫。

而且,無論如何,C字符串不是最好的方法。

1

而不是使用一個字符串,我會做它作爲int(或長)的數組。操作員的算法只是你手中的工作。作業問題?

+1

你是對的,但是海報必須處理數字溢出。這可能會稍微棘手。 – Gnosophilon