加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数乘法

发布时间:2020-12-14 03:32:46 所属栏目:大数据 来源:网络整理
导读:大数乘法: 由于计算机的存储量有限,当你要计算的的数值或者输入的数值超过一个最大容量(目前是long),存储,就会出错 因此不能直接得到大数乘法. 我们要得到大数成法,应该另想办法. 仔细观察乘法元算,如: 625*625 如果有 int a[]={6,2,5}; int b[]={6,5};

大数乘法:

由于计算机的存储量有限,当你要计算的的数值或者输入的数值超过一个最大容量(目前是long),存储,就会出错

因此不能直接得到大数乘法.

我们要得到大数成法,应该另想办法.

仔细观察乘法元算,如:

625*625

如果有

int a[]={6,2,5};

int b[]={6,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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读