大数相乘
发布时间:2020-12-14 03:29:04 所属栏目:大数据 来源:网络整理
导读:? ? #include stdio.h#include string.h#include stdlib.h#define N 100void GetDigits(int *a,char *s);void multiply(int *a,int *b,int *c);main(){ char s1[N],s2[N]; int i,j,a[N],b[N],c[N*2]; printf("n input number a: "); scanf("%s",s1); printf
? ? #include <stdio.h> #include <string.h> #include <stdlib.h> #define N 100 void GetDigits(int *a,char *s); void multiply(int *a,int *b,int *c); main() { char s1[N],s2[N]; int i,j,a[N],b[N],c[N*2]; printf("n input number a: "); scanf("%s",s1); printf("n input number b: "); scanf("%s",s2); //把输入的字符串,按位存放到数组 GetDigits(a,s1); GetDigits(b,s2); multiply(a,b,c); //找到最高位 j=N*2-1; while(c[j]==0) j--; //打印计算结果 printf("n %s * %s=",s1,s2); for(i=j;i>=0;i--) printf("%d",c[i]); } /*把字符串形式的数字按位存放到数组*/ void GetDigits(int *a,char *s) { int i; char digit; int len=strlen(s); for(i=0;i<N;i++) *(a+i)=0; for(i=0;i<len;i++) { digit=*(s+i); *(a+len-1-i) = digit - '0'; } } /*把a*b的结果存储到数组c中,按位表示*/ void multiply(int *a,int *c) { int i,j; //先把结果数组设置为0zsw for(i=0;i<N*2;i++) *(c+i)=0; for(i=0;i<N;i++) for(j=0;j<N;j++) *(c+i+j)+=*(a+i) * *(b+j); // 处理进位 for(i=0;i<N*2-1;i++) { *(c+i+1)+=*(c+i)/10; //进位累加到高位 *(c+i)=*(c+i)%10; //该位的最后结果 } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |