请问代码有什么问题,提交后只有73分
应该先对比例进行化简,避免越界, 如果a比n大, 比如n = 20, a:b = 100:200, 那么计算结果就是20 / 100 * 200 = 0, 但实际结果是40(有用点个采纳)
#include <iostream>
using namespace std;
// 辗转相除法
unsigned long long int getLCM(unsigned long long int a, unsigned long long int b)
{
int max = (a > b ? a : b);
int min = (a < b ? a : b);
int res = max % min;
while (res)
{
max = min;//小的给大的
min = res;//余数给小的
res = max % min;
}
return min;//整除返回小的
}
int main(){
unsigned long long int n, a, b, least_common_multiple, res;
char c;
cin >> n >> a >> c >> b;
// 先将比例化简, 减小乘积之后的结果
// 找a, b的最小公倍数
least_common_multiple = getLCM(a, b);
a /= least_common_multiple;
b /= least_common_multiple;
res = n / a * b;
cout << res;
return 0;
}
unsigned long long的最大值:18446744073709551615