首页 > 代码库 > 大数相乘
大数相乘
#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("\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 *b,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; //该位的最后结果 }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。