700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C语言大数相乘(整形)

C语言大数相乘(整形)

时间:2020-12-04 04:15:15

相关推荐

C语言大数相乘(整形)

C语言大数相乘(整形)

我们在用C语言运算时int存不下很大的数字无法直接计算大数相乘,那么这时候就需要把数字当作字符先存下来,然后存入数组中一部分一部分的进行运算。我通过-纸短情长大佬的这篇博客理解了大数相乘的基本思路,并引用大佬的代码,但大佬没有讲的很细,我将我自己的理解发表出来以供参考,如有侵权请联系我删除。

首先给出这个图,对照这张图方便理解代码

下面是代码:

//大数乘法#include<stdio.h>#include<math.h>#include<string.h>#define M 10005char s1[M],s2[M],s[M];int a[M],b[M],c[M];int main(){int i,j,m,n,k;while(~scanf("%s%s",s1,s2)){memset(c,0,sizeof(c));n=strlen(s1);m=strlen(s2);k=n+m;//保证相乘后的位数不会大于kprintf("s1的长度=%d s2的长度=%d\n",n,m);/*-----------------把字符串s1和s2 逆序 用数字排列-------------*/for(i=0; i<n; i++)a[i]=s1[n-i-1]-'0'; //字符型减'0'可以得到整数型for(i=0; i<m; i++)b[i]=s2[m-1-i]-'0';/*------------------乘运算存入c中------------------*/for(i=0; i<m; i++)for(j=0; j<n; j++)c[i+j]+=a[j]*b[i];/*-----------------进位运算得到结果----------------*/for(i=0; i<=k; i++){if(c[i]>=10){c[i+1]+=c[i]/10;//进位c[i]%=10;}}/*-------------去除前导0---------------*/i=k;while(c[i]==0) i--;/*判断两个非负数之积是否为0,以及逆序打印c[]*/if(i<0) printf("0");else{for(; i>=0; i--)printf("%d",c[i]);}printf("\n");}return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
大数相乘(C语言)

大数相乘(C语言)

2019-11-21

C语言大数相乘

C语言大数相乘

2023-09-27

C语言实现大数相乘

C语言实现大数相乘

2021-03-21

C语言之大数相乘

C语言之大数相乘

2023-07-13