2 条题解

  • 3
    @ 2025-10-12 21:02:40

    注意到 + 等于 \53,于是字符替代后用 eval 乱搞即可。

    mp = input().split(' ')
    print(eval("%s \53 %s" % (mp[0], mp[1])))
    
    • @ 2025-10-12 21:14:11

      还是python大蛇

    • @ 2025-10-13 9:56:32

      我可以在这道题禁用 python。hydro 支持单题限制代码语言。

  • 1
    @ 2025-10-12 20:27:51

    考虑使用位运算,即二进制加法。

    对于下面的四种情况:

    • 0+0=00+0=0 (无进位)
    • 0+1=10+1=1 (无进位)
    • 1+0=11+0=1 (无进位)
    • 1+1=01+1=0 (有进位)

    我们可以发现,对于某一位,最终的运算结果即为异或运算的结果。

    而对于进位操作,我们只需要通过与运算得出需要进位的数位,再进行左移一位的操作即可。

    但是这里还有一个小问题:因为不能使用 + 号,我们无法通过一次运算得出最终结果。

    解决方法也很简单,我们可以重复进行上述操作,每次将进位当作下一轮的 “被加数”,直到在某一次操作中的进位为 0,此时得到的数即为运算结果。

    至此,这道题就做完了,但是在写代码的时候还要注意一个细节:

    • 对于负数进行左移操作是未定义行为,因此在输入时要使用 unsigned 类型,输出时再转成 signed 类型。

    代码如下:

    #include <iostream>
    using namespace std;
    unsigned a,b;
    int main(){
        cin>>a>>b;
        while(b){
            unsigned carry=(a&b)<<1;
            a^=b;
            b=carry;
        }
        cout<<(signed)a;
        return 0;
    }
    
    • 1

    【代码检查测试】A+B without "+" and "-"

    信息

    ID
    1258
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    64
    已通过
    30
    上传者