大数乘法

举报
悦来客栈的老板 发表于 2020/12/30 00:23:34 2020/12/30
【摘要】 #include <stdio.h>#include <string.h> #define N 1000 void charstoint(int a[], char s[]){ int i; int len = strlen(s); memset(a,0,4*N); //整型占4个字节 for (i=0; i<len; i++) { //...

  
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define N 1000
  4. void charstoint(int a[], char s[])
  5. {
  6. int i;
  7. int len = strlen(s);
  8. memset(a,0,4*N); //整型占4个字节
  9. for (i=0; i<len; i++)
  10. {
  11. //不考虑负数与非数字字符的情况
  12. a[len-1-i] = s[i] - '0'; //将每一个字符转化为数字逆序存放在整型数组中,例如字符串 123456 -> a[0] = 6,a[1] = 5, ...a[5] = 1;
  13. }
  14. }
  15. void multiply(int a[], int b[], int c[])
  16. {
  17. int i,j;
  18. memset(c,0,2*N*4); //c数组存放两个大数相乘的结果。
  19. for (i=0; i<N; i++)
  20. {
  21. for (j=0; j<N; j++)
  22. {
  23. c[i+j] += a[i] * b[j]; // 模拟乘法运行
  24. }
  25. }
  26. for (i=0; i<2*N-1; i++) //处理进位
  27. {
  28. c[i+1] += c[i] / 10;
  29. c[i] = c[i] % 10;
  30. }
  31. }
  32. int main()
  33. {
  34. int i,j = 2*N-1;
  35. int a[N],b[N],c[2*N];
  36. char s1[N],s2[N];
  37. printf("input the first number:");
  38. gets(s1);
  39. printf("input the second number:");
  40. gets(s2);
  41. charstoint(a,s1);
  42. charstoint(b,s2);
  43. multiply(a,b,c);
  44. while(c[j]==0) //去掉多余的0
  45. {
  46. j--;
  47. }
  48. for (i=j; i>=0; --i) //打印结果
  49. {
  50. printf("%d",c[i]);
  51. }
  52. printf("\n");
  53. return 0;
  54. }


文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq523176585/article/details/11567291

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。