题意:
先给你两个数,请求出它们的最大公约数.
输入:
输入有多组。每一组两个整数a,b,其中a,b的范围在int之内哦。
代码:
#include<stdio.h>
int main()
{
int yue(int x,int y);
int a,b;
while(scanf("%d %d",&a,&b)!=EOF)
printf("%d\n",yue(a,b));
return 0;
}
int yue(int x,int y)
{
int z,t;
if(x<y)
{
t=x;
x=y;
y=t;
}
while(y!=0)
{
z=x%y;
x=y;
y=z;
}
return (x);
}
算法:辗转相除法(我也不知道具体原理是什么,反正就是取余取余)
假设有x,y两个数,定义一个t一个z;(t是用来改变值的,z是余数)
比如x和y分别是:56,24;
z=x%y =>z=8;x=56;y=24;
x=y; =>x=y=24;z=8;
y=z; =>y=z=8;x=24;
此时y!=0,继续循环;
z=x%y =>z=0;
x=y; =>x=y=8;
y=z;=>y=z=0;x=8;
此时y==0,x即为24和56的最大公约数;
简写:
#include<stdio.h>
int gcd(int a,int b){return b?gcd(b,a%b):a;}//递归形式吧?是这么回事。。。?:是个好东西。。。
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
printf("%d\n",gcd(a,b));
return 0;
}