#include <iostream>
using namespace std;
int lcm(int a, int b) {
int x = a, y = b;
while (y) { int t = x % y; x = y; y = t; }
return a * b / x;
}
int main() {
cout << lcm(12, 18) << endl;
return 0;
}
- (1) 程序输出结果是______。(4 分)
- (2) 函数中被 while 循环求出的 x 最终值代表什么?该算法名称是______。(5 分)
- (3) 若调用 lcm(0, 5),程序会出现什么问题?______。(5 分)
答案解析
(1)gcd(12,18)=6,lcm=12×18/6=36。(2)x 最终值为最大公约数(gcd),算法为欧几里得算法(辗转相除法)。(3)若两参数同时为 0 则 x=0 后 a*b/x=0/0 产生除零错误/未定义行为(单参数为 0 时 lcm=0)。