不使用 + 和 - 运算符计算两整数之和

问题概述

不使用运算符 +-计算两整数之和

思考

不使用 +- ,那就只能想到用位运算来处理了。思路如下:

  • 两数进行 ^(异或运算),可以得到两个数在相同位上数值不同的相加结果
  • 两数进行 &(与运算),可以得到哪些位该进位
    • 如果与运算的结果为 0,代表两数的所有位都是不同的数值,不需要进位,那么第一步得到的结果就是最终的结果
    • 如果与运算的结果不为 0,代表有位要进位,那么需要将这个结果往左移一位
  • 重复上面两步,直到与运算结果为 0,即得到的就是正确的结果

实现代码

public int getSum(int a, int b) {
    while (b != 0) {
        int t = a^b;
        b = (a&b)<<1;
        a = t;
    }
    return a;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是基于 Python 语言实现的代码,可以实现超长整数的加法和减法运算: ```python def remove_leading_zeros(num_str): """去除字符串前导0""" num_str = num_str.lstrip('0') if not num_str: return '0' else: return num_str def add(num1, num2): """超长整数加法""" # 先把两个数对齐 len1, len2 = len(num1), len(num2) if len1 > len2: num2 = '0' * (len1 - len2) + num2 elif len1 < len2: num1 = '0' * (len2 - len1) + num1 # 从低位向高位按位相加 carry = 0 # 进位 res = [] for i in range(len(num1)-1, -1, -1): n1, n2 = int(num1[i]), int(num2[i]) s = n1 + n2 + carry carry = s // 10 res.append(str(s % 10)) if carry: res.append(str(carry)) # 把结果反转并转成字符串 return ''.join(res[::-1]) def sub(num1, num2): """超长整数减法""" # 先比较被减数和减数的大小,如果被减数小于减数,则交换被减数和减数,并加上负号 if num1 < num2: num1, num2 = num2, num1 sign = '-' else: sign = '' # 先把两个数对齐 len1, len2 = len(num1), len(num2) if len1 > len2: num2 = '0' * (len1 - len2) + num2 elif len1 < len2: num1 = '0' * (len2 - len1) + num1 # 从低位向高位按位相减 borrow = 0 # 借位 res = [] for i in range(len(num1)-1, -1, -1): n1, n2 = int(num1[i]), int(num2[i]) s = n1 - n2 - borrow if s < 0: s += 10 borrow = 1 else: borrow = 0 res.append(str(s)) # 去除结果前导0并加上负号(如果有的话) res_str = ''.join(res[::-1]) res_str = remove_leading_zeros(res_str) return sign + res_str def calc(): """计算超长整数表达式""" num1 = input("请输入第一个超长整数:") num2 = input("请输入第二个超长整数:") op = input("请输入运算符(+或-):") if op == '+': res = add(num1, num2) elif op == '-': res = sub(num1, num2) else: print("不支持的运算符") return print("运算结果:", res) calc() ``` 该程序首先定义了三个函数:`remove_leading_zeros`、`add`、`sub`。其中 `remove_leading_zeros` 函数用于去除字符串的前导0,`add` 函数实现超长整数的加法运算,`sub` 函数实现超长整数的减法运算。 最后定义了一个 `calc` 函数,用于获取用户输入的超长整数表达式,并计算出运算结果。 运行程序后,用户需要依次输入两个超长整数运算符。程序会根据运算符调用 `add` 或 `sub` 函数进行计算,并输出运算结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值