题目1056:最大公约数
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:4771
解决:3097
-
题目描述:
-
输入两个正整数,求其最大公约数。
-
输入:
-
测试数据有多组,每组输入两个正整数。
-
输出:
-
对于每组输入,请输出其最大公约数。
-
样例输入:
-
49 14
-
样例输出:
-
7
-
-
分析:欧几里得算法,a、b的最大公约数与a、a mod b的最大公约数相同,不断重复此过程,直至其中有一个为0,则另一个即为最大公约数
-
-
代码如下:
#include <stdio.h> int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); } int main(int argc, char** argv) { int x,y; while(scanf("%d%d",&x,&y)!=EOF) { printf("%d\n",gcd(x,y)); } return 0; }
-
非递归代码如下:
-
#include <stdio.h> int main(int argc, char** argv) { int x,y; while(scanf("%d%d",&x,&y)!=EOF) { while(x!=0&&y!=0) { int t=x; x=y; y=t%y; } if(y==0) printf("%d\n",x); else printf("%d\n",y); } return 0; }
-
-