int mul[1000]; int a1[100],b1[100]; int lena,lenb; void output() //输出结果 { int i,pos; for(i=999;i>=0;i--) if(mul[i]!=0) {pos = i; break;} for(i=pos;i>=0;i--) printf("%d",mul[i]); printf("\n"); } int mov(int *c,int n) { int pos,i; for(i=199;i>=0;i--) //找到c数组中的最高位 if(c[i]!=0) {pos=i;break;} for(i=pos;i>=0;i--) //将数组往后面移动n位 c[i+n] = c[i]; for(i=0;i<n;i++) c[i] = 0; //往前面补0 return (pos+n); //返回最高位位置 } void cheng() { int i,j,k; int c[200]; memset(c,sizeof(c)); for(i=0;i<lenb;i++) { for(j=0;j<lena;j++) { c[j] = a1[j]*b1[i]; //被乘数的每一位乘以乘数的一位 } mov(c,i); for(k=0;k<200;k++) //把乘积累加起来 mul[k]+=c[k]; int sum=0; for(k=0;k<999;k++) //产生进位处理 { sum +=mul[k]; mul[k] = sum%10; sum/=10; } memset(c,sizeof(c)); } } void main() { int i,j; char a[100],b[100]; //用来输入两个大数 gets(a); gets(b); lena=strlen(a); lenb=strlen(b); for(i=0;a[i]!='\0';i++) a1[i] = a[strlen(a)-i-1] - 48; //将字符串大数转换成整形 for(i=0;b[i]!='\0';i++) b1[i] = b[strlen(b)-i-1]-48; cheng(); //大数相乘 output(); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。