2012-05-23 2 views
1

제 문제는 엄청난 숫자를 합산하는 법을 모르는 것입니다 (예 : "172839023434234792834798237494"또는 "-172839023498234792834798237494"). 그래서 나는이 종류의 객체를 저장할 char* m_value을 만들었습니다. 이제 기본 산술 연산을 만들고 싶습니다. 먼저 변환하거나 itoa과 같은 것을 사용해야합니까? 내 경우 엔 숫자를 저장하는 다른 옵션이 없다.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

당신은 라를 사용해야합니다 rge numbers 산술 라이브러리. GMP은 좋은 옵션입니다. 프로세서는이 크기의 숫자에 대한 연산을 네이티브로 수행 할 수 없기 때문에이 라이브러리는 소프트웨어에서 모든 구식 수학을 처리합니다.

3

whell을 재발 명하지 않으려면 BigInteger 라이브러리를 사용해야합니다.

그리고 어쨌든, C 문자열은이를 수행하는 최선의 방법이 아닙니다.

1

문자열을 사용하는 대신 int (또는 long) 배열로 사용합니다. 연산자에 대한 알고리즘은 당신이 손으로 할 일에 관한 것입니다.

+1

맞지만 포스터는 처리해야합니다 숫자가 오버플로됩니다. 이것은 약간 까다로워 질 수 있습니다. – Gnosophilon

관련 문제