将main()函数外的两个数相乘会产生未知结果

时间:2015-04-30 15:23:33

标签: c++

我正在尝试编写一个计算最小公倍数的函数,但是当它将两个变量(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;
}

3 个答案:

答案 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。

相关问题