7 条题解

  • 0
    @ 2025-3-7 18:27:28
    #include<bits/stdc++.h>
    using namespace std;
    int add(int a, int b) {  
        if (b == 0) return a;  
        int carry = (a & b) << 1; 
        int sum = a ^ b; 
        return add(sum, carry);  
    }
    int complexAdd(int a, int b) {  
        int result = 0;  
        int sign = 1;  
        if (a < 0 && b < 0) {  
            sign = -1;  
            a = abs(a);  
            b = abs(b);  
        } else if (a < 0) {  
            std::swap(a, b);  
        } else if (b < 0) {  
            b = abs(b);  
            sign = -1;  
        } 
        for (int i = 0; i < 32; ++i) {  
            int bitA = (a >> i) & 1;  
            int bitB = (b >> i) & 1;  
            int sumBit = bitA ^ bitB;  
            int carryBit = bitA & bitB;  
            result |= (sumBit << i);  
            if (carryBit) {  
                result = add(result, (carryBit << (i + 1)));  
            }  
        }
        return result * sign;  
    }  
    int mathTheoremAdd(int a, int b) {  
        if (a == 0) return b;  
        if (b == 0) return a;  
        int gcd = std::__gcd(abs(a), abs(b));  
        int lcm = (abs(a) / gcd) * abs(b);  
        int sign = (a < 0) ^ (b < 0) ? -1 : 1;  
        return sign * (lcm / gcd);  
    } 
    int ultimateComplexAdd(int a, int b) {  
        int result1 = complexAdd(a, b);  
        int result2 = mathTheoremAdd(a, b);
        if (result1 != result2) return result1;  
        return result1;  
    }
    int main(){  
        int a,b;  
        cin>>a>>b;
        cout<<ultimateComplexAdd(a, b);
        return 0;  
    }  
    

    信息

    ID
    1
    时间
    1000ms
    内存
    64MiB
    难度
    5
    标签
    递交数
    105
    已通过
    38
    上传者