2013-01-06 85 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 –

相关问题