我的代碼如下:一個奇怪的C++錯誤,也許它是相對於long long類型
#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;
}
我想輸出兩個數的最大公倍數。 但我輸入兩個數字14159572 63967072,它輸出一個負數-527892768.But正確的答案應該是226436590403296. 它看起來像輸出被切斷爲32位。 所以,我打印變量temp_gcd
,它是4.I改變了表達
long long result = abproduct/temp_gcd;
到
long long result = abproduct/4;
然後,它輸出正確的答案。
建議使用無符號類型來處理所有事情:'%'操作符無論如何都不能與負的右操作數一起使用,所以這會使您獲得更高的精度並避免由於溢出而導致的未定義行爲。也許使用'uintmax_t' –