加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

两个大数相加,使用字符串模拟相加过程

发布时间:2020-12-14 02:37:10 所属栏目:大数据 来源:网络整理
导读:大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求。可以使用字符串来表示大数,模拟大数相加的过程。 思路:1.反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加; ? ? ? ? ? ? 2.对齐两个字符串,即

大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求。可以使用字符串来表示大数,模拟大数相加的过程。

思路:1.反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加;

? ? ? ? ? ? 2.对齐两个字符串,即短字符串的高位用‘0’补齐,便于后面的相加;

? ? ? ? ? ? 3.把两个正整数相加,一位一位的加并加上进位。

具体代码如下:

[cpp]? view plain copy print ?

在CODE上查看代码片

派生到我的代码片

  1. /**?
  2. *?两个大数相加,且这两个大数是正整数?
  3. *?暂时不考虑负数,不考虑输入不合法的情况?
  4. *?要保证输入是正确的才能保证程序正常运行?
  5. */??
  6. ??
  7. #include?<stdio.h>??
  8. #include?<string.h>??
  9. ??
  10. #define?MAXSIZE?1000??
  11. int?main()??
  12. {??
  13. ????char?number1[MAXSIZE+1];??
  14. ????char?number2[MAXSIZE+1];??
  15. char?sum[MAXSIZE+2];??
  16. char?temp1[MAXSIZE+1];??
  17. char?temp2[MAXSIZE+1];??
  18. int?len1?=?0;??
  19. int?len2?=?0;??
  20. int?i?=?0;??
  21. int?j?=?0;??
  22. int?maxLen?=?0;??
  23. int?nSum?=?0;??
  24. int?nCarryBit?=?0;??
  25. int?nOverFlow?=?0;??
  26. ????gets(number1);??
  27. ????gets(number2);??
  28. ????//1.反转字符串,便于从低位到高位相加和最高位的进位导致和的位数增加??
  29. ????len1?=?strlen(number1);??
  30. ????len2?=?strlen(number2);??
  31. ????j?=?0;??
  32. ????for(i?=?len1-1;?i?>=?0;?--i)??
  33. ????{??
  34. ????????temp1[j++]?=?number1[i];??
  35. ????}??
  36. ????temp1[j]?=?'';??
  37. ????for(i?=?len2-1;?i?>=?0;?--i)??
  38. ????????temp2[j++]?=?number2[i];??
  39. //2.把两个字符串补齐,即短字符串的高位用‘0’补齐??
  40. ????maxLen?=?(len1?>?len2)?len1:len2;??
  41. ????if(len1?<?len2)??
  42. ????{??
  43. ????????for(i?=?len1;?i?<?len2;?++i)??
  44. ????????????temp1[i]?=?'0';??
  45. ????????temp1[len2]?=?'';??
  46. ????}??
  47. ????else?if(len1?>?len2)??
  48. ????????for(i?=?len2;?i?<?len1;?++i)??
  49. ????????????temp2[i]?=?'0';??
  50. ????????temp2[len1]?=?'';??
  51. ????//3.把两个正整数相加,一位一位的加并加上进位??
  52. ????for(i?=?0;?i?<?maxLen;?i++)??
  53. ????????nSum?=?temp1[i]?-?'0'?+?temp2[i]?-?'0'?+?nCarryBit;??
  54. ????????if(nSum?>?9)??
  55. ????????{??
  56. ????????????if(i?==?(maxLen-1))??
  57. ????????????{??
  58. ????????????????nOverFlow?=?1;??
  59. ????????????}??
  60. ??????????????
  61. ????????????nCarryBit?=?1;??
  62. ????????????sum[i]?=?nSum?-?10?+?'0';??
  63. ????????}??
  64. ????????else??
  65. ????????{??
  66. ????????????nCarryBit?=?0;??
  67. ????????????sum[i]?=?nSum?+?'0';??
  68. ????????}??
  69. //如果溢出的话表示位增加了??
  70. ????if(nOverFlow?==?1)??
  71. ????????sum[maxLen++]?=?nCarryBit?+?'0';??
  72. ????sum[maxLen]?=?'';??
  73. //从后向前输出,即是相加后的值??
  74. ????for(i?=?maxLen-1;?i?>=0;?--i)??
  75. ????????putchar(sum[i]);??
  76. ????printf("n");??
  77. ????return?0;??
  78. }??
运行结果:

(编辑:李大同)

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

    推荐文章
      热点阅读