程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2024-11(2)

Python 大数字字符串求和(包含多位小数,长整数)

发布于2019-08-20 12:26     阅读(1926)     评论(0)     点赞(22)     收藏(4)


解决思路:

  1. 找到两个数字字符串的小数点的位置,没有的补上 “.0”。
  2. 以小数点的位置给两个数字字符串补上0,让二者同等长度。
  3. 从右向左循环相加,组合成结果字符串,遇到小数点直接添加小数点。
  4. 将最后的进位与结果组合,正常最终结果
    1. # num1, num2 两个字符串
    2. def long_sum(num1,num2):
    3. #1 参数准备
    4. carry = 0 # 默认进位为0
    5. res = "" # 最后结果
    6. #2 计算长度,与小数点位置
    7. size1 = len(num1)
    8. log1 = num1.find('.')
    9. if log1 == -1: # 没有小数点,就对该数字字符串转化为小数字符串
    10. size1 += 2
    11. num1 += ".0"
    12. log1 = size1- 2
    13. size2 = len(num2)
    14. log2 = num2.find('.')
    15. if log2 == -1:
    16. size2 += 2
    17. num2 += ".0"
    18. log2 = size2- 2
    19. # print(num1,num2,) # 补齐小数点 1234.56 123456.0
    20. # 3补全字符串
    21. # 3.1 整数部分补齐
    22. temp = log2-log1
    23. if temp > 0:
    24. num1 = "0"*(temp) + num1
    25. else:
    26. num2 = "0"*(temp*-1) + num2
    27. # 3.2 小数部分补全
    28. temp = size2-1-log2 - (size1 - 1- log1)
    29. if temp>0:
    30. num1 = num1 + "0"*(temp)
    31. else:
    32. num2 = num2 + "0"*(temp*-1)
    33. # print(num1,num2,) # 补全后 001234.56 123456.00
    34. #4 循环计算
    35. for n in range(len(num1)-1,-1,-1):
    36. # a 求和
    37. if num1[n] == "." or num2[n] == ".":
    38. res = "." + res
    39. continue
    40. temp = int(num1[n]) + int(num2[n]) + carry
    41. # b 求模
    42. carry = temp // 10
    43. # c 求余 并赋值
    44. res = str(temp % 10) + res
    45. if carry > 0:
    46. res = carry + res
    47. return res
    48. print(long_sum('123456', '123456'))

     



所属网站分类: 技术文章 > 博客

作者:小胖子爱吃土豆

链接:https://www.pythonheidong.com/blog/article/49217/89fc64180404be20aba9/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

22 0
收藏该文
已收藏

评论内容:(最多支持255个字符)