大数自然不能用普通的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 }