Ich versuche, das LCM einer Zahl mit der folgenden Formel zu finden. Lcm = Gcd/(a * b). Dies funktioniert gut für kleine Zahlen, aber für größere Zahlen, wie im Code gezeigt, überläuft es. Ich habe versucht, long long als variablen Typ zu verwenden, aber immer noch keinen Effekt. Wie behebe ich das Überlaufproblem?Überlauf der Antwort für größere Werte
#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");
}
Und was ist Ihre Frage? – dhke
Das ist überfüllt. Wie repariere ich das? –
Indem Sie noch größere Datentypen verwenden: '' unsigned long long' zum Beispiel, oder werfen Sie einen Blick auf GMP oder Boost – Rakete1111