低端初学者大数相乘有关问题
低端菜鸟求助大数相乘问题
RT,下面程序是我用C做的大数相乘的计算。
逻辑上应该没什么问题,我在纸上推算过,可是程序得出的数字偏差很大~
基本思想就是每一位数字相乘,然后计算进位和余数,代码里有注释,大神们帮忙看下吧~
关于大数相乘还有什么好的算法也请不吝赐教~嘿嘿。
------解决方案--------------------
c[i] += c[i]%10;//进位之后的余数
=>
c[i] = c[i]%10;//进位之后的余数
RT,下面程序是我用C做的大数相乘的计算。
逻辑上应该没什么问题,我在纸上推算过,可是程序得出的数字偏差很大~
基本思想就是每一位数字相乘,然后计算进位和余数,代码里有注释,大神们帮忙看下吧~
- C/C++ code
#include <stdlib.h> #include <stdio.h> #include <string.h> #define N 200 void move(int *a,char *s);//把大数s存入数组a void mul(int *a,int *b,int *c);//将a*b的结果存入c void move(int *a,char *s){ int i,len; char ch; len = strlen(s);//获得s长度,循环会用到 for(i = 0;i<N;i++){ a[i] = 0;//全部初始化为0 } //将s存入a for(i = 0;i<len;i++){ ch = s[i]; a[len-i-1] = ch-'0';//因为接受的是字符串,所以需要用ASCII码相减 } } void mul(int *a, int *b,int *c){ int i,j; for(i = 0;i<2*N;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<2*N;i++) { c[i+1] += c[i]/10;//获得进位的数 c[i] += c[i]%10;//进位之后的余数 } } int main(void){ int a[N],b[N],c[2*N]; char s1[N]; char s2[N]; int i,j = 2*N-1; printf("Please enter the first big number:"); scanf("%s",s1); printf("\nPlease enter the second number:"); scanf("%s",s2); move(a,s1); move(b,s2); mul(a,b,c); while(c[j] == 0){ j--; } printf("\nResult:"); for(i = j;i>=0;i--){ printf("%d",c[i]); } getchar(); getchar(); return 0; }
关于大数相乘还有什么好的算法也请不吝赐教~嘿嘿。
------解决方案--------------------
c[i] += c[i]%10;//进位之后的余数
=>
c[i] = c[i]%10;//进位之后的余数