题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=2028
Lowest Common Multiple Plus
算法分析:
第一步:使用辗转相除法求出两个数的最大公约数a,而最小公倍数b=两数之积/最大公约数a,求出两个数的最小公倍数b
第二步:再用b与下一个数求最小公倍数
以此类推。
辗转相除法:用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。此时除数就是所求最大公约数。
注意:过程中,先乘后除可能过界,要先除再乘!!!
我的ac代码:
#include <stdio.h> int main() { int n, i; int num[100], n1, n2, temp;//n1较大数,n2较小数 while (~scanf("%d", &n)) { for (int j = 0; j < n; j++) { scanf("%d", &num[j]); } for (i = 0; i < n - 1; i++) { n1 = num[i]; n2 = num[i + 1]; // 辗转相除是用大的除以小的。如果n1<n2,第一次相当n1与n2值交换 while (n1 % n2 != 0) { temp = n1 % n2; n1 = n2; n2 = temp; } num[i + 1] = num[i] / n2* num[i + 1];//求最小公倍数 } printf("%d\n", num[i]); } return 0; }