我的代码如下:一个奇怪的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' –