ACM求两个正整数的最小公倍数
题目:求两个正整数的最小公倍数。
Input:
输入数据含有不多于50对的数据,每对数据由两个正整数(0<n1,n2<100000)组成。
Output:
对于每组数据n1和n1,计算最小公倍数,每个计算结果应占单独一行。
Sample Input:
6 5 18 12Sample Output:
30
36
代码:
#include<stdio.h>
#include<math.h>
int g(int c,int d)
{
int j;
for(j=(c>d)?c:d;j<=c*d;j++)
{
if(j%c==0&&j%d==0) return j;
}
}
int main()
{
int n1,n2,a[50],j=0,s=0;
while(scanf("%d%d",&n1,&n2)==2&&n1>0&&n2<100000)
{
a[j++]=g(n1,n2);
s++;
}
for(j=0;j<s;j++)
printf("%d\n",a[j]);
return 0;
}
输出答案是正确的,但是ACM编译出来是Wrong Answer,大家帮帮忙
[解决办法]
以下是AC的代码,注意最后要先除后乘,否则对于99999这样的最大数出错。
#include <stdio.h> unsigned g(int a,int b){ unsigned t; if (a < b) { t = a; a = b; b = t; } while (b) { t = b; b = a % b; a = t; } return a;} int main() { unsigned n1,n2; while(scanf("%u%u",&n1,&n2)==2) { printf("%u\n", n1/g(n1,n2)*n2); } return 0; }
[解决办法]
24楼代码中如果(j%c==0&&j%d==0)不成立就死循环,所以Time Limit Exceeded。