加入收藏 | 设为首页 | 会员中心 | 我要投稿 上饶站长网 (https://www.0793zz.com.cn/)- 数据库平台、视觉智能、智能搜索、决策智能、迁移!
当前位置: 首页 > 大数据 > 正文

大数相乘 C++实现

发布时间:2021-01-20 21:06:58 所属栏目:大数据 来源:网络整理
导读:12*34=? 乘数:12 被乘数:34 先把乘数列出来,第i行列左起第i位数,列N次(N为乘数的位数) 第二行起每次右移一位 (1) (1) ??? (2) (2) 写入被乘数,按先列后行的方式 (1,3) (1,4) ????? (2,3) (2,4) 将()内的数两乘 (1,3=3) (1,4=4) ??????? (2,3=6) (2,4=

12*34=?
乘数:12
被乘数:34


先把乘数列出来,第i行列左起第i位数,列N次(N为乘数的位数)
第二行起每次右移一位
(1) (1)
??? (2) (2)

写入被乘数,按先列后行的方式
(1,3) (1,4)
????? (2,3) (2,4)

将()内的数两乘
(1,3=3) (1,4=4)
??????? (2,3=6) (2,4=8)

相加,注意进位
(1,4=8)
-------------------------
???? 3????? 10?????? 8
???????? .??????????
-------------------------
???? 4?????? 0?????? 8

12*34=408

再看三位数乘法

123*456=?

第一步:
(1) (1) (1)
??? (2) (2) (2)
??????? (3) (3) (3)?

第二步:
(1,4) (1,5) (1,6)
????? (2,4) (2,5) (2,6)
??????????? (3,4) (3,5) (3,6)

第三步:
(1,4= 4) (1,5= 5) (1,6= 6)
???????? (2,4= 8) (2,5=10) (2,6=12)
????????????????? (3,4=12) (3,5=15) (3,6=18)

第四步:
(1,6=18)
----------------------------------------------
????? 4?????? 13?????? 28?????? 27?????? 18
?????????? .??????? .??????? .??????? .
----------------------------------------------
????? 5??????? 6??????? 0??????? 8??????? 8

123*456=56088

??? 分析一下每一位的值是如何计算出来的,以下说的位都是从个位算起:
结果的第i位,是乘数的第i位乘以被乘数的1位,再加上乘数的第i-1位乘
以被乘数的第2位,一起加到乘数的第1位乘以被乘数的第i位。这样描述起
来有点不明白,画个图就很清楚了:
123*456的第3位:从乘数的第3位(1)起到第1位(3),按从右向左的方式
逐个乘以被乘数:
1*6+2*5+3*4=28

再把进位加上就可以了。
到这里,已经可以得出一个通用的计算方法,把结果逐位计算出来。

? ?通过上面的分析,我们知道了算法的核心思想,接下来就能把算法实现,实现方法如下:

[cpp]? view plain ?copy
  1. #include?"iostream"??
  2. ??
  3. using?namespace?std;??
  4. #define?N?100??
  5. ??
  6. void?char_to_int(int?*a?,?char*?ch){??
  7. ????int?len?=?strlen(ch);??
  8. ????int?i?=?0,?term?=?0;??
  9. ????for(i?=?0?;?i?<?N?;?i++){??
  10. ????????a[i]?=?0;??
  11. ????}??
  12. for(i?=?0?;?i?<?len?;?i++){??
  13. ????????term?=?ch[i];??
  14. ????????a[len-i-1]?=?(term?-?'0');??
  15. }???
  16. int?main()??
  17. {??
  18. int?a[N],b[N],c[2*N];??
  19. char?ch1[N],?ch2[N];??
  20. int?i?=?0?,?j?=0;??
  21. ????cout<<"1:";??
  22. ????cin>>ch1;??
  23. ????cout<<"2:";??
  24. ????cin>>ch2; ?
  25. ????char_to_int(a?,?ch1);??
  26. ????char_to_int(b?,?ch2);??
  27. ??????
  28. for(i?=?0?;?i?<?2*N?;?++i){??
  29. ????????c[i]?=?0;??
  30. ????for(i?=?0?;?i?<?N?;?++i){??
  31. ????????for(j?=?0?;?j?<?N?;?++j){??
  32. ????????????c[i+j]?+=?a[i]?*?b[j];??
  33. ????????}??
  34. ????}??
  35. for(i?=?0?;?i?<?2*N?-1?;?++i){??
  36. ????????c[i+1]?+=?c[i]?/10;??
  37. ????????c[i]?=?c[i]?%?10;??
  38. ????j?=?2*N?-1;??
  39. while(c[j]?==?0)????
  40. ???????????????j--;????
  41. for(i?=?j;i?>=?0;?--i)????
  42. ???????????printf("%d",c[i]);????
  43. ????printf("n");????
  44. return?0;????
  45. } ?

(编辑:上饶站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读