7 条题解
-
0
#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
- 上传者