大数的加法乘法

大数自然不能用普通的int,或者long long.因为是肯定存不下的。所以就有两个选择,一个是通过字符串来进行运算,可以看之前的博客。

http://www.cnblogs.com/jaydenouyang/p/6482977.html

这里只介绍通过数组进行的运算。

1.加法

  比如要求 1234 + 456 的和,可将 :

      1234 化为 a[0]=4(表示该数有多少位),a[1]=4,a[2]=3,a[3]=2,a[4]=1;

      456 化为 b[0]=3(同理),b[1]=6,b[2]=5,b[3]=4;      (在这里逆序排更方便些,正着也可以)

 1 int lena=a[0];
 2 int lenb=b[0];
 3 
 4 int s=0;
 5 for(int i=1;i<=lena;i++)
 6 {
 7     a[i]=a[i]+b[i]+s;
 8     s=0;
 9     if(a[i]>9)
10     {
11         s=a[i]/10;
12         a[i]%=10;
13     }
14 }
15 if(s)
16 {
17     a[++len]=s;
18 }

2.乘法

  同理按上述的方法存放大数

 1 int lena;
 2 int lenb;
 3 
 4 int s=0;
 5 int c=0;
 6 for(j=1;j<=lena;j++)
 7 {
 8     s=b[j]*(4*i-2)+c;
 9     c=s/10;
10     a[j]=s%10;
11 }
12 while(c)
13 {
14     a[++lena]=c%10;
15     c/=10;
16 }