大数乘法:
由于计算机的存储量有限,当你要计算的的数值或者输入的数值超过一个最大容量(目前是long),存储,就会出错
因此不能直接得到大数乘法.
我们要得到大数成法,应该另想办法.
仔细观察乘法元算,如:
625*625
如果有
int a[]={6,2,5};
int b[]={6,2,5};
那么结果c[MAXLEN]={0};
中的每一位,则为
c[i+j]+=a[i]*b[j];
全做完后,进行进位处理.即可得到答案.
<span style="color:#000000;">#define MAXLEN 100
#include <string.h>
#include <stdio.h>
int set_array(int a[],int ful)
{
int i=0;
do{
char c;
c=getchar();
if(c-'0'>=0&&c-'0'<=9){
a[MAXLEN-1-i]=c-'0';
i++;
}else{
break;
}
}while(a[MAXLEN-1-i+1]>=0);
return i;
}
void swap(int *a,int *b)
{
int c;
c=*a;
*a=*b;
*b=c;
}
void reset_array(int a[],int p,int q)
{
for(;p<=q;p++,q--)
{
swap(&a[p],&a[q]);
}
}
int get_fabs(int a[],int la,int b[],int lb,int c[]){
int i=0,j=0;
for(i=0;i<la;i++)
{
for(j=0;j<lb;j++)
{
c[MAXLEN-1-(i+j)]+=a[MAXLEN-1-i]*b[MAXLEN-1-j];
}
}
return i+j;
}
void set_ruler(int num[])
{
int i=0;
for(i=MAXLEN-1;i>0;i--){
num[i-1]+=num[i]/10;
num[i]=num[i];
}
}
void print_array(int num[],int len)
{
int i=0;
for(i=0;i<len;i++){
printf("%d ",num[i]);
}
printf("\n");
}
int main()
{
int a[MAXLEN]={0},la=-1;
int b[MAXLEN]={0},lb=-1;
int c[MAXLEN]={0},lc=-1;
printf("input op_num_one:(<0will break!)\n");
la=set_array(a,MAXLEN);
printf("input op_num_tow:(<0will break!)\n");
lb=set_array(b,MAXLEN);
print_array(a,MAXLEN);
print_array(b,MAXLEN);
reset_array(a,MAXLEN-la,MAXLEN-1);
reset_array(b,MAXLEN-lb,MAXLEN-1);
get_fabs(a,la,b,lb,c);
set_ruler(c);
print_array(c,MAXLEN);
}</span>