求最小公倍数

来源:百度知道 编辑:UC知道 时间:2024/05/22 06:52:50
给出两个数,求最小公倍数。

每行输入两个数a,b。(0< a < 1000000, 0< b < 1000000 )。

每行输出最小公倍数。(a,b的最小公倍数 < 2^31)

#include<stdio.h>
int main()
{
int a,b,c,s;
while (2==scanf("%d %d",&a,&b))

{ if (a<b)
{
c=a;
a=b;
b=c;
}

s=a*b;
while(b!=0)
{
c=a%b;
a=b;
b=c;
}

printf("%d\n",s/a);
}

return 0;
}

这个是我写的代码。可是通过不了,请指教

是Online Judge吧?小问题。

不要先乘
s = a * b;
这样可能溢出。应该先算出最大公约数r,然后再输出a / r * b。注意一定是先除后乘,其中a,b可以先保存起来。

另外,检查一下跳出条件。建议把
while (2==scanf("%d %d",&a,&b))
改成
while ( 2 == scanf("%d %d", &a, &b) && !(a == 0 && b == 0) )
以防万一。

你把所有的int改成long,s定义成double输出改成:printf("%0.0lf\n",s/a);

#include<stdio.h>
int main()
{
long a,b,c;
double s;
while (scanf("%ld %ld",&a,&b)!=EOF)
{
/*if (a<b) 这些没必要,这个算法无所谓谁大谁小。
{
c=a;
a=b;
b=c;
}
*/
s=a*b;
while(b!=0)
{
c=a%b;
a=b;
b=c;
}

printf("%0.0lf\n",s/a);
}

return 0;
}