求最小公倍数
来源:百度知道 编辑: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;
}
这个是我写的代码。可是通过不了,请指教
每行输入两个数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;
}