【发布时间】:2014-03-24 12:39:54
【问题描述】:
我有一个 Python 中的工作算法,我想将其转换为 C++:
def gcd(a, b):
if (a % b == 0):
return b
else:
return gcd(b, a % b)
def solution(N, M):
lcm = N * M / gcd(N, M)
return lcm / M
我在输入值较大时遇到问题,因为 N 和 M 的倍数会导致整数溢出,并且使用 long 存储其值似乎没有帮助,除非我做错了什么。
这是我当前的代码:
int gcd(int a, int b)
{
if (a % b == 0)
return b;
else
return gcd(b, a % b);
}
int solution(int N, int M) {
// Calculate greatest common divisor
int g = gcd(N, M);
// Calculate the least common multiple
long m = N * M;
int lcm = m / g;
return lcm / M;
}
【问题讨论】:
-
你向
solution提供什么价值? -
N 和 M 都在范围内 (1, 1 000 000 000)。
-
嗯,一个快速的解决方案是使用
long long。不过,这并不意味着较大的值都是安全的。 -
但是
N*M在范围内吗?您可以尝试使用long long;在您的平台上,int和long的大小可能相同。
标签: python c++ integer overflow