2012-05-23 125 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