设为首页 加入收藏

TOP

C语言实现大数整数乘法
2013-09-24 09:24:00 来源: 作者: 【 】 浏览:133
Tags:语言 实现 大数整数 乘法

  /*大数整数乘法方法*/

  #include<stdio.h>

  #include<stdlib.h>

  #include<string.h>

  char * bigmuilty(char*muiltied,int len1,char *muilty,int len2)//muiltied 为被乘数,len1为其长。muilty为乘数,len2为其长

  {

  int len;

  int i=0;

  int j=0;

  int k=0;

  int tmp_result=0;

  int carry=0;

  char* result;

  len=len1+len2; //两个数相乘他们的最大长度为乘数与被乘数的长度和

  result=(char*)calloc(len,1);//动态分配内存

  for(i=0;i<len2;i++)//用乘数的每一位去乘以被乘数

  {

  for(j=0;j<len1;j++)

  {

  tmp_result=muilty[len2-i-1]*muiltied[len1-j-1];//得到零时结果

  result[j+i]+=tmp_result;//如果以0为起始标号,被乘数和乘数下标分别从右往左依次增加,则结果存放的位置为j+i

  }

  for(k=0;k<=j+i-1;k++)//整理结果,使每位的值在0-9之间

  {

  if(result[k]>9)

  {

  carry=result[k]/10;

  result[k]=result[k]%10;

  result[k+1]+=carry;

  }

  }

  }

  return result;

  }

  int main()

  {

  int len1=0;

  int len2=0;

  int len;

  int i=0;

  int num='0';

  char *result;

  char muiltied[BUFSIZ];//被乘数存放位置

  char muilty[BUFSIZ];

  printf("entry muiltied :  ");

  scanf("%s",muiltied);

  printf("\nentry muilty :  ");

  scanf("%s",muilty);

  len1=strlen(muiltied);

  len2=strlen(muilty);

  len=len1+len2;

  for(i=0;i<len1;i++)

  {

  muiltied[i]=muiltied[i]-num;

  }

  for(i=0;i<len2;i++)

  {

  muilty[i]=muilty[i]-num;

  }

  result=bigmuilty(muiltied,len1,muilty,len2);

  i=len-2;

  printf("\nresult : ");

  if(result[len-1]>0)

  {

  printf("%c",result[len-1]+num);

  }

  while(i>=0)

  {

  printf("%c",result[i]+num);

  i--;

  }

  printf("\n");

  free(result);

  return 0;

  }

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇整数开方算法 下一篇C模块回调Lua函数的两种方法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: