次の数式を使用して数値のLCMを検索しようとしています。 Lcm = Gcd /(a * b)である。これは少数では問題なく動作していますが、コードに表示されているように、数値が大きいほどオーバーフローします。私はlong型を可変型として使用しようとしましたが、効果はありません。オーバーフローの問題を解決するにはどうすればよいですか?大きい値の場合はオーバーフローします
#include <iostream>
#include <vector>
using namespace std;
long long int LCM(int n1, int n2){
const int size = 2;
long long int sum;
long long int gcd;
long long int lcm = 0;
vector<int> number(2);
number[0] = n1;
number[1] = n2;
while (true)
{
sum = number[0] % number[1];
gcd = number[1];
if (sum == 0)
break;
number[0] = number[1];
number[1] = sum;
}
lcm = ((n1*n2)/gcd);
return lcm;
}
int main()
{
cout << LCM(28851538, 1183019) << endl;
system("pause");
}
n2の使用N1/GCD *そして、あなたの質問は何ですか? – dhke
それはあふれている。どのように私はそれを修正するのですか? –
もっと大きなデータ型を使うことで、例えば 'unsigned long long'やGMPやBoostを見てください – Rakete1111