我正在尝试编写一个计算最小公倍数的函数,但是当它将两个变量(301337,307829)相乘时,由于某种原因,程序不能将lcm函数内的两个数相乘。我已经尝试过将类型更改为long long但是没有任何区别。当我在main函数中乘以2个变量时,它工作得很完美。谢谢。
int lcm(int a, int b)
{
int l = a * b;
cout << l << endl; // Displays -12790139
int g = gcd(a, b);
cout << g << endl; // works correct
return l/g;
}
int main() {
cout << lcm(301337, 307829) << endl;
return 0;
}
答案 0 :(得分:1)
我想这会起作用
int lcm(int a, int b)
{
unsigned long long int l = a * b;
cout << l << endl; // Displays 18446744071980538477
int g = gcd(a, b);
cout << g << endl; // works correct
return l/g;
}
int main() {
cout << lcm(301337, 307829) << endl;
return 0;
}
答案 1 :(得分:0)
int l = a * b;
超出了范围。请改用long long
。
如果您不想更改 a 和 b ,只需 l ,请按以下方式使用:
long long l =(long long)a * b;
答案 2 :(得分:0)
301337 * 307829 = 92760267373,溢出!!它不适合只能处理间隔中的数字的整数] -2 ^ 32,2 ^ 32 [。 使用long long而不是unsigned long long。