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

大数相乘

发布时间:2020-12-14 03:39:09 所属栏目:大数据 来源:网络整理
导读:#include stdio.h #include string.h #define MAX 100 int main() { ?char a[MAX],b[MAX]; ?int a1[MAX],b1[MAX]; ?int length_a,length_b,m=0,len; ?int result[MAX*2]={0},t; ?printf("请输入第一个大整数:"); ?scanf("%s",a); ??? length_a=strlen(a); ?

#include <stdio.h>
#include <string.h>
#define MAX 100
int main()
{
?char a[MAX],b[MAX];
?int a1[MAX],b1[MAX];
?int length_a,length_b,m=0,len;
?int result[MAX*2]={0},t;
?printf("请输入第一个大整数:");
?scanf("%s",a);
??? length_a=strlen(a);
??? printf("请输入第二个大整数:");
??? scanf("%s",b);
?length_b=strlen(b);
?len=length_a+length_b;
?//倒置a数组
?for(int i=len-1;i>=0;i--)
?{
???? ?if(m<length_a)
???a1[m++]=a[i-len+length_a]-'0';
??else
???a1[m++]=0;
?}

??? //倒置b数组
?m=0;
??? for( i=len-1;i>=0;i--)
?{
???? ?if(m<length_b)
???b1[m++]=b[i-len+length_b]-'0';
??else
???b1[m++]=0;
?}

?//两数相乘
???? m=0;
?for(i=0;i<len;i++)
?{?? m=0;
??for(int j=0;j<len;j++)
??{
??
???????? t=(a1[j]*b1[i]+m+result[j+i])%10;
?? m=(a1[j]*b1[i]+m+result[j+i])/10;//m为进位
?? result[j+i]=t;
?? /*之前这一段代码写的是
??? result[j+i]=(a1[j]*b1[i]+m+result[j+i])%10;
?? m=(a1[j]*b1[i]+m+result[j+i])/10;
?? 最后发现这样算是错的,因为在第一个式子中result[j+i]的值已经变化,因此引入了t.*/
??}
???
?}
??
?//结果显示
?m=0;
?for(i=0;i<len/2;i++)
?{??
??m=result[i];
??result[i]=result[len-i-1];//运算结果倒置成正确顺序
??????? result[len-i-1]=m;
?}
?for(i=0;i<len-1;i++)//跳过多余的0
?{
??if(result[i]!=0)
???break;
?}
??? for(;i<len;i++)
?????? printf("%d",result[i]);
?printf("n");

?return 0; }

(编辑:李大同)

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

    推荐文章
      热点阅读