题目在介绍里面已经透露了很大一部分信息,所以只要动一丢丢脑筋就可以啦,让我们来看一下代码吧:
#include <stdio.h>
int gcd(int a,int b)
{
return b? gcd(b,a%b) : a;
}
int lcm(int a,int b)
{
int m,n,c;
m=a*b;
n=m/gcd(a,b);
return n;
}
int main()
{
int a,b;
while(scanf("%d %d",&a,&b)==2)
printf("%d %d\n",gcd(a,b),lcm(a,b));
return 0;
}
代码看上去十分的简洁,因为只要遵循题意来就好了呀,这里运用了三目运算符,可以减少不少的代码量;
让我们再来看一下VJ上杭电的水题。既然说了这是水题的话那就说明这个题目本身是不怎么难的。
但是初步看上去要求n个数的最小公倍数,一个一个记录下来求的话好像是有点麻烦,那么有没有好的方法呢???
当然是有的呀,不然我也不会说哈哈哈哈~~~~~~
先看代码吧:
unsigned long lcm(unsigned long a,unsigned long b)
{
unsigned long m,n,c;
m=a,n=b;
c=a%b;
while(c!=0)
{
a=b;
b=c;
c=a%b;
}
return m*n/b;
}
int main()
{
int n,i;
unsigned long t;
while(scanf("%d",&n)!=EOF)
{//必须用unsigned long型,最后可能为32位的整数
unsigned long x=1;
for(i=1;i<=n;i++)
{
scanf("%ld",&t);
x=lcm(x,t);
}
printf("%d\n",x);
}
return 0;
}
这里我没有写一个求最大公因数的函数gcd,为的就是让大家能看懂gcd的来源;
在一开始我设立了一个x=1,因为1与任何数的最大公倍数都是它本身,所以,1的设立尤为重要,x=lcm(x,t)是整个代码的核心,他实现了得到多个数的最小公倍数。
这里的数据类型我设置的是unsigned long型,其实再开大一点也没有关系,但如果开小了的话就会数据溢出。
谢谢大家的关注,我会持续更博的。 T H A N K Y O U F O R W A T C H ! ! !