2013-01-06 86 views
-1

如何在不使用「long」的情況下對兩個大數進行求和和乘法運算?如何在不使用「long」的情況下對兩個大數進行求和和乘法運算?

它將不得不與陣列對嗎? 所以..想象即時通訊做的18 + 18的總和:

18 
+15 
array1 (1,8) 
array2 (1,5) 

我需要去在由colmn它列..8 + 5 = 13 - > 3和1 + 1 + 1(第三個'1'將來自溢出)。

..所以我需要做的,對於每一個元素的數組

#include <stdio.h> 
#include <conio.h> 
#include <vectors.h> 

int main() 
{ 

int array1 ??? 
int array2 ??? 

printf("first number"); 
scanf(); 

printf("second number"); 
scanf(); 


printf("To Sum Enter 'S', to Multiply Enter 'M'"); 
scanf(); 


If(M){ 

//波紋管代碼是錯誤的,因爲我仍然要使用「長」屬性附加傷害...

while(i=1,i<LA2,i++){ 
while(j=1,j<LA1,j++){ 
    A1[i]*A2[j]*10^(i+j-2); 

      } 
      } 
    } 

If(S){ 

while(i=1,i<LA2,i++){ 
while(j=1,j<LA1,j++){ 
    A1[i]*A2[j]*10 pow(i+j-2); 

//斜面與POW(),因爲我不能使用「長」,這意味着生病爲此已經通過元件做元件陣列中,並在第三陣列呈現結果

 } 
     } 


    } 

} 
+1

那麼,你說的是「大數字」嗎?順便說一句,我認爲你的代碼中並不真正意味着^,因爲它是「xor」,而且你似乎意味着「權力」,它是floatin點輸入的函數pow()或者你必須寫自己的[我認爲]。 –

+0

你真正的問題是什麼?如果它是「我可以使用數組來表示大整數」,那麼是的,這是一個很好的實現。 – chm

+0

'^'被認爲是pow(),感謝您的關注 – jony

回答

1

如果您不想使用long,您可以使用兩個整數創建一個struct

像這樣:

struct BigInteger{ 
    int lowerInt; 
    int upperInt; 
}; 

然後你就可以加,減,乘,根據不同的算法把這些結構。例如,要乘以,您可以使用Shift-And-Add乘數算法。

但是這樣做有嚴重的性能問題。使用完整的語言,而不是限制自己。

PS:它是什麼語言問題? C還是C++?

+0

C++時,我正在考慮Knuth的第二卷,而我並沒有被要求用longs來做這件事。不得不這樣做,好像數字可能是無限的,所以生病不得不按元素添加/乘以元素 – jony

+0

來逐元素地完成它,按字節執行。我記得做了類似於英特爾8085處理器的東西,其中我只有8位表示一個整數,並且乘法需要16位(爲此我們將整數擴充到連續位置 –

+0

進一步,位乘法將被多次加法,生成進位的1或0.這就是二進制的美麗,進位產生的永遠不會大於1. @jony –

相關問題