首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

ACM求两个正整数的最小公倍数,该怎么解决

2012-04-21 
ACM求两个正整数的最小公倍数题目:求两个正整数的最小公倍数。Input:输入数据含有不多于50对的数据,每对数

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这样的最大数出错。

C/C++ code
#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。

热点排行