Mein Code ist folgende:Eine seltsame C++ Fehler, vielleicht ist es in Bezug auf den langen langen Typ
#include <iostream>
int gcd(int a, int b) {
//write your code here
if(a==0){
return b;
}else if(b==0){
return a;
}else if(a>b){
int a_pri=a%b;
return gcd(b,a_pri);
}else if(a<b){
int b_pri=b%a;
return gcd(a,b_pri);
}else{
return a;
}
}
long long lcm(int a, int b) {
int temp_gcd = gcd(a,b);
long long abproduct = a*b;
long long result = abproduct/temp_gcd;
return result;
}
int main() {
int a, b;
std::cin >> a >> b;
std::cout << lcm(a,b) << std::endl;
return 0;
}
Ich würde das größte gemeinsame Vielfache von zwei Zahlen mögen ausgegeben. aber wie ich zwei Zahlen eingeben 14159572 63967072, Es gibt eine negative Zahl -527892768.Aber die richtige Antwort sollte 222636590403296 sein. Es sieht aus wie die Ausgabe auf 32bit abgeschnitten wird. so, ich die Variable temp_gcd
drucken, ist es 4.Ich
long long result = abproduct/temp_gcd;
zu
long long result = abproduct/4;
Dann gibt es die richtige Antwort.
Vorschlagen mit unsigned Typen für alles: '%' operator funktioniert sowieso nicht mit negativen rechten Operanden, und das bringt Ihnen etwas mehr Präzision und vermeidet potentiell undefiniertes Verhalten wegen Überlaufs. Vielleicht benutze 'uintmax_t' –