2015-04-22 52 views
-1

在這裏,我有一個bigint計算器,它使用safearray類(未顯示)來存儲大量數字並對它們進行算術運算。我有增加和減少工作,但是當我嘗試乘法它編譯和運行,但沒有任何反應。有人可以幫我解決這個問題嗎?由於Bigint乘法幫助C++

int size = 100; 

class bigint 
{ 
    SafeArray<int> *arr; 
public: 
    char sign; 
bigint()             //initializes to zero 
    { 
     arr = new SafeArray<int>; 
     for(int i =0;i < size; i++) 
      arr->set(i,0); 
    } 

void print()            //prints numbers without zeroes in front 
    { 
     bool start_num=false; 
     for(int i = 0;i <arr->get_size() ;i++) 
     { 
      if(arr->get(i)!=0 && start_num==false) 
      {start_num=true; 
       cout << arr->get(i);} 
     else if(start_num==true) 
      cout<<arr->get(i); 

     } 

     cout<<endl; 
    } 

void assign(const bigint &A)        // 
    { 
     for(int i=0;i<arr->get_size();i++) 
     {               //Ways to initialize stuff 
      arr->set(i,A.arr->get(i)); 
     } 

    } 

void assign(int num)          // 
    { 
     for(int i = arr->get_size()- 1; i >= 0; i--) 
     { 
      arr->set(i,num%10); 
      num /=10; 
     } 


    } 

void assign(string num)         // 
    { 
     long len = num.length(); 
     int j=arr->get_size()-1; 
     for(long i=len-1;i>=0;i--) 
     { 
      arr->set(j,num[i]-48); 
      j--; 
     } 
    } 

void add_pos(const bigint &A)        //add big ints 
    { 
     int carry=0; 
     for(int i=size-1;i>=0;i--) 
      { 
       int result = arr->get(i)+A.arr->get(i)+carry; 
       arr->set(i,result%10); 
       carry=result/10; 
      } 
    } 

    void multiply(bigint &A) 
    { 
     bigint temp; 


     for(int i=0;i<size;i +=1) 
     { 
      temp.arr->set(i,arr->get(i)); 
      arr->set(i,0); 
     } 
     int i1, i2; 
     for(i2=0; i2<size; i2++) 
     { 
      int borrow =0; 
      for(i1=0;i1+i2<size;i1++) 
      { 
       int total=temp.arr->get(i1)*A.arr->get(i2); 
       int totalsum=total+arr->get(i1+i2)+borrow; 
       arr->set(i1+i2,totalsum%10); 
       borrow = totalsum/10; 
      } 
     } 


}; 
int main() 

{ 


    bigint a, b, c; 
    a.assign("2543281"); 
    b.assign("3434"); 
    a.mulitply(b); 
    a.print(); 
return 0; 
} 
+1

您是否嘗試過使用調試器逐步調試代碼並查看它在做什麼? – NathanOliver

+0

您是否嘗試過使用GDB來查看您的程序在做什麼? – Nico

+0

您的示例中顯示了相關的代碼缺失和不需要的代碼。 –

回答

0

size = 100 2張bigint數相乘的結果肯定需要超過100數字,也許200

對於最小的修改,您可以將size作爲構造函數參數傳遞給bigint。理想情況下,bigint可能會使用一個矢量,以便數字數組可以方便靈活的方式動態增長。

class bigint { 
    std::vector<int8_t> digits_; // each digit must be in 0-9 range 
    ...