B
这题有两个方法,,从题目描述情况来看,第一个就是用循环来回减
代码如下:
#include<stdio.h>
int main()
{
int a,b,m,n,s,x,temp,i;
while(scanf("%d %d",&a,&b)!=EOF)
{ m=a;
n=b;
if(a==0)
printf("%d %d\n",b,a);
here:
if(a>=b)
{
while(a>=b)
a=a-b;
}
else
{
while(a<b)
b=b-a;
}
if(a==0)
s=b;
else if(b==0)
s=a;
else
goto here;
if(m<n)
{
temp=m;
m=n;
n=temp;
}
for(i=m;i>0;i++)
if(i%m==0&&i%n==0)
{
x=i;
break;
}
printf("%d %d\n",s,x);
}
}
但是会超时,而且代码也特别特别长= =
然后第二个方法,就是题目说的,辗转相除,余数就是另一个数,(不需要来回减,比如10000,2,这肯定得花不少时间=-=,一除直接ok)
#include <stdio.h>
int main()
{
int a,b,c,d,e,f;
while(scanf("%d %d",&a,&b)!=EOF)
{
if(a==0&&b!=0)
printf("%d %d\n",b,a);
else if(a!=0&&b==0)
printf("%d %d\n",a,b);
else
{
if(a<b)
{
e=a;
a=b;
b=e;
}
d=a*b;
c=a%b;
while(c!=0)
{
a=b;
b=c;
c=a%b;
}
f=d/b;
printf("%d %d\n",b,f);
}
}
return 0;
}
注意任何整数都是0的约数
0是任何整数的倍数。