题目描述>
输入两个正整数,求其最大公约数。
输入描述:
测试数据有多组,每组输入两个正整数。
输出描述:
对于每组输入,请输出其最大公约数。
样例输入:
49 14
样例输出:
7
解题思路: 采用欧几里得算法,代码采用递归和非递归两方式。
- 递归:
#include<bits/stdc++.h>
using namespace std;
int gcd(int a, int b){
if(b==0) return a;//若b为零则最大公约数为a
else return gcd(b, a%b); //否则,则改为求b与a%b的最大公约数
}
int main(){
int a, b;
while(scanf("%d%d", &a, &b)!=EOF){//输入两个正整数
printf("%d\n", gcd(a,b));//输出所求的最大公约数
}
return 0;
}
- 非递归:
#include<bits/stdc++.h>
using namespace std;
int gcd(int a, int b){
while(b!=0){//只要b不为0则一直持续该过程
int t = a%b;
a = b; //使a变成b
b = t; //使b变成a%b
}
return a; //当b为0时,a即是所求
}
int main(){
int a, b;
while(scanf("%d%d", &a, &b) != EOF){
cout << gcd(a,b) << endl;
}
return 0;
}