杭电oj HDOJ 2028 Lowest Common Multiple Plus
Problem Description
求n个数的最小公倍数。
Input
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。
Output
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。
解题思路
n个数的最小公倍数是“前n-1个数的最小公倍数”与“第n个数”之间的最小公倍数,当n=2时,就是求第一个数与第二个数之间的最小公倍数了。
本人的C++解决方案
#include <iostream>
using namespace std;
int main()
{
int n, min, temp, num, i, j;
while (cin>>n) {
for (i = 0; i < n; i++) {
cin>>num;
if (i == 0) {
// 只有一个数据时,直接赋值给min
min = num;
} else {
// 让min临时为num和min之间的较小数
// 便于下面for循环的操作
if (num < min) {
temp = num;
num = min;
min = temp;
}
for (j = 1; j <= min; j++) {
// 从1开始第一个满足乘以num后能整除min的整数
// 让其乘以num则是二者的最小公倍数
if (num * j % min == 0) {
min = num * j;
break;
}
}
}
}
cout<<min<<endl;
}
return 0;
}
代码通过HDOJ平台运行检查,如发现错误,欢迎指出和纠正,谢谢!