首页 > 编程问答 >不使用 + 或 - 运算符 | 添加 2 个数字Python

不使用 + 或 - 运算符 | 添加 2 个数字Python

时间:2024-07-26 15:21:36浏览次数:12  
标签:python

我一直在尝试编写逻辑,但测试用例失败。

如何改进我的代码?

代码:

# Given two integers a and b, return the sum of the two integers without using the operators + and -.

a = -1
b = 1

min_val  = min(a,b)
max_val  = max(a,b)

if min_val == max_val:
    print(min_val*2)
else:
    lst = [i for i in range(max_val) ] + ([ i for i in range( min_val)])
    print(len(sorted(lst)))

预期输出是: 0

所有其他测试用例均通过

a=5 and b=5
a=10 and b=5
a=5 and b=10

的代码的问题在于,当 min_val 为负数且 max_val 为正数时,它不能创建正确的列表。在这种情况下,需要找到一种方法来将负范围包含到的列表中,而无需使用 + 运算符。

可以使用按位异或(^)运算符和按位取反(~)运算符来实现加法运算,而不使用 + - 。下面是代码的修正版本:

def getSum(a, b):
    # 32 位整数的 2 的补数
    mask = 0xFFFFFFFF

    # 处理负数
    a &= mask
    b &= mask

    while (b & mask) > 0:
        carry = (a & b) << 1
        a = a ^ b
        b = carry

    # 处理溢出
    return (a & mask) if a <= 0x7FFFFFFF else ~(a ^ mask)

a = -1
b = 1
print(getSum(a, b))  # 输出:0 

代码说明:

  1. 按位异或(^): 此运算符对两个数的相应位执行异或运算。如果位不同(一个为 0,另一个为 1),则结果为 1。否则,结果为 0。在加法方面,这模拟了不进位的加法。

  2. 按位与(&): 此运算符对两个数的相应位执行与运算。如果两个位都为 1,则结果为 1。否则,结果为 0。在加法方面,这用于在发生进位时生成进位位。

  3. 左移(<<): 此运算符将一个数的位向左移动指定的位数,从而有效地将该数乘以 2 的幂。在加法方面,这用于将进位移动到下一个位置。

  4. 2 的补数: Python 中的整数使用 2 的补数表示法表示。为了处理负数并处理潜在的溢出,我们使用 mask = 0xFFFFFFFF ,并且在计算过程中对 a b 进行掩码处理。

  5. 循环: 代码使用一个循环,只要 b 中还有非零位要添加到 a 中,该循环就会继续。在循环的每次迭代中,我们都会计算进位,更新 a 以使用 ^ 表示不进位的加法,并将进位移到下一个位置。

  6. 处理溢出: 最后,我们检查 a 是否大于 0x7FFFFFFF (32 位整数的最大值)。如果是,则表示发生了溢出,我们需要应用 2 的补数来获得正确的负结果。

此代码使用按位运算来模拟加法运算,从而有效地将两个整数相加,而无需使用 + - 运算符。

标签:python
From: 78796618

相关文章

  • python 中的智能 Cisco IOS 差异
    之前:hostnameFoo!interfaceGigabitEthernet1/1switchportmodetrunkswitchporttrunkallowedvlan10,20,30!interfaceGigabitEthernet1/2ipaddress192.0.2.1255.255.255.128noipproxy-arp!之后:hostnameFoo!interfaceGigabitEt......
  • 无法编译 Arduino ESP32 代码:.../python3: exec 格式错误
    昨天我使用MacOSArduinoIDE或VSCode编译Arduino草图没有任何问题。但今天什么也编译不了。我尝试在ArduinoIDE或带有Arduino扩展的VSCode中编译的任何草图都会出现此错误:fork/exec/Library/Frameworks/Python.framework/Versions/3.11/bin/python3:exec......
  • 用Python解析邮件日志
    我的任务有点困难。我有一个邮件日志,如:Oct315:30:18mail1postfix/lmtp[5369]:DB10242054:to=<XXXXX>,orig_to=<XXXXXX>,relay=ip[ip]:port,delay=1.4,delays=0.04/0/0.01/1.4,dsn=2.0.0,status=sent(2502.0.0fromMTA(smtp:[iP]:port):2502.0.0Ok:queueda......
  • Python,Pyinstaller打包含taichi模块的程序
    Python版本3.9、taichi版本1.7.1,pyinstaller版本6.9.0问题描述:正常Pyinstaller打包后报错[Taichi]version1.7.1,llvm15.0.1,commit0f143b2f,win,python3.9.19[Taichi]Startingonarch=x64Traceback(mostrecentcalllast):File"taichi\lang\_wrap_inspec......
  • Python,运行Yolo项目,报错AttributeError: ‘ImageDraw‘ object has no attribute ‘te
    Python3.9问题描述:其他电脑已经运行成功的Python,YOLO代码到我电脑上运行报错Traceback(mostrecentcalllast): File"C:\Users\Administrator\Desktop\20240725\识别项目\predict.py",line122,in<module>  frame=np.array(yolo.detect_image(frame)) Fil......
  • Python从零开始制做文字游戏(荒岛求生)
    文章目录前言开发游戏《荒岛求生》游戏大纲背景内容通关条件游戏过程探索荒岛购买物资休息总结代码开发定义变量当前代码引入背景故事当前代码循环问题解决:函数当前代码制作延时当前代码制作a函数(探索荒岛阶段)展示数......
  • 使用 Python 进行数据分析:入门指南
    使用Python进行数据分析:入门指南1.简介本指南将介绍如何使用Python进行数据分析,涵盖从数据加载到可视化分析的各个方面。2.必要的库NumPy:用于数值计算和数组操作。Pandas:用于数据处理和分析,提供DataFrame结构。Matplotlib:用于数据可视化,创建各种图表。Seab......
  • IT实战课堂计算机毕业设计源码精品基于Python的高校教育教材采购出入库进销存储信息管
    项目功能简介:《[含文档+PPT+源码等]精品基于Python的高校教育教材信息管理系统设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利!软件开发环境及开发工具:开......
  • 为什么我的 Python 脚本失败并出现 TypeError?
    我正在编写一个Python脚本,该脚本应该计算数字列表的总和。但是,当我运行代码时遇到TypeError这是一个最小的例子:numbers=[1,2,3,'4']total=sum(numbers)print(total)Theerrormessageis:TypeError:unsupportedoperandtype(s)for+:'int'and'str......
  • 如何通过socks代理传递所有Python的流量?
    有如何通过http代理传递所有Python的流量?但是,它不处理sock代理。我想使用sock代理,我们可以通过ssh隧道轻松获得它。ssh-D5005user@server你可以使用socks库,让你的Python代码通过SOCKS代理传递所有流量。这个库可以让你在套接字级别上指定代......