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

C语言实现大数整数乘法

发布时间:2020-12-14 03:59:39 所属栏目:大数据 来源:网络整理
导读:/*大数整数乘法方法*/ #includestdio.h #includestdlib.h #includestring.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

/*大数整数乘法方法*/ #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; }

(编辑:李大同)

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

    推荐文章
      热点阅读