大数相乘 C++实现
下面这些内容是参考http://xmxoxo.blog.hexun.com/6984004_d.html 自己整理了一下: 12*34=? 写入被乘数,按先列后行的方式 将()内的数两乘 相加,注意进位 12*34=408 再看三位数乘法 123*456=? 第一步: 第二步: 第三步: 第四步: 123*456=56088 ??? 分析一下每一位的值是如何计算出来的,以下说的位都是从个位算起: 再把进位加上就可以了。 ? ?通过上面的分析,我们知道了算法的核心思想,接下来就能把算法实现,实现方法如下:
#include "iostream" using namespace std; #define N 100 void char_to_int(int *a,char* ch){ int len = strlen(ch); int i = 0,term = 0; for(i = 0 ; i < N ; i++){ a[i] = 0; } for(i = 0 ; i < len ; i++){ term = ch[i]; a[len-i-1] = (term - '0'); } } int main() { int a[N],b[N],c[2*N]; char ch1[N],ch2[N]; int i = 0,j =0; cout<<"1:"; cin>>ch1; cout<<"2:"; cin>>ch2; scanf("s",&ch2); char_to_int(a,ch1); char_to_int(b,ch2); 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 -1 ; ++i){ c[i+1] += c[i] /10; c[i] = c[i] % 10; } j = 2*N -1; while(c[j] == 0) j--; for(i = j;i >= 0; --i) printf("%d",c[i]); printf("n"); return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |