DreamDev

http://dreamdev.co.bokee.net

企业介绍

欢迎访问DreamDev的企业博客,感受我们的企业文化、品牌理念;与我们互动交流,发表见解;与我们一起分享开放、自由交流的喜悦。 更详细
  • 行业:电脑/数码/软件
  • 地区:武漢
  • 电话:02787434100
  • 传真:02787434100

企业博客信息

创建者

成员列表

暂时没有相关信息!

大数乘法C语言实现

字体大小: - - zmdxyboyandy   发表于 07-11-18 19:09     阅读(9532)   评论(0)     分类:

大数乘法:

按照32位机器表示法,最多可计算结果为32位以内的数的乘法,否则会溢出;

借助字符串转换,可以解决这一问题;

#include<stdio.h>
#include<string.h>
#define MAX 100
#define MUX 200
char A[MAX];
char B[MAX];
int reverse(char str[],int len){
  char temp;
  int i;
  for(i=0;i<(len+1)/2;i++){
    temp=str[i];
    str[i]=str[len-i-1];
    str[len-i-1]=temp;
  }
  return 0;
}
int main(void){
  char *ptr;
  int increase=0;
  ptr=A;
  int i=0;
  int j=0;
  int temp=0;
  int add=0;
  printf("input the first number:");
  scanf("%s",ptr);
  ptr=B;
  printf("\ninput the second number:");
  scanf("%s",ptr);
  printf("%s*%s=",A,B);
  reverse(A,strlen(A));
  reverse(B,strlen(B));
  char result[MUX];//array to store the result;
  for(i=0;i<MUX-1;i++)
    result[i]='0';//initial the array,every bit is 0;
  for(i=0;i<strlen(A);i++){
    increase=0;
    for(j=0;j<strlen(B);j++){
      temp=(A[i]-48)*(B[j]-48);
      add=(temp+increase+(result[i+j]-48))%10;
      increase=(temp+increase+(result[i+j]-48))/10;
      result[i+j]=add+48;
      if(j==strlen(B)-1&&increase>0)
        result[i+j+1]=increase+48;  
    }//for j
  
  }//for i
  int k=0;
  char temper;
  reverse(result,MUX-1);//attention :MUX-1
  int writeflag=0;
  printf("\nthe result is:");
  for(i=0;i<MUX;i++){
    if(result[i]!='0') writeflag=1;
    if(writeflag==1)
      printf("%c",result[i]);
  }
  printf("\n");
  return 0;
}//return main

返回文章列表标签:   張毛迪   软件  

分享到:

下一篇:c++多线程编程初探 上一篇:浅析facebook的成功

发表评论评论 (0)
发表评论

登录名   密码   游客无须输入密码     注册企博网帐号

验证码