【九度OJ】题目1056:最大公约数 解题报告
【九度OJ】题目1056:最大公约数 解题报告
标签(空格分隔): 九度OJ
原题地址:http://ac.jobdu.com/problem.php?pid=1056
题目描述:
输入两个正整数,求其最大公约数。
输入:
测试数据有多组,每组输入两个正整数。
输出:
对于每组输入,请输出其最大公约数。
样例输入:
49 14
样例输出:
7
Ways
如果遍历的话会很麻烦,这里参考了书上的欧几里得算法。即:
如果求a,b的最大公约数,如果b为0,那么最大公约数为a;
否则,则改为求``b``和``a % b``的最大公约数。
证明我也看不懂,就不讲了。C++算法如下。
#include <stdio.h>
int gcd(int a, int b) {
if (b == 0) return a;
else return gcd(b, a % b);
}
int main() {
int a, b;
while (scanf("%d%d", &a, &b) != EOF) {
printf("%d\n", gcd(a, b));
}
return 0;
}
另外,是否想起了前面的java BigInteger类?没错!自带求最大公约数方法!虽然用java效率很低,但是,核心算法不用我们写,不容易错啊!
方法如下。
import java.util.*;
import java.math.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String line =scanner.nextLine();
String[] params = line.split(" ");
BigInteger a = new BigInteger(params[0]);
BigInteger b = new BigInteger(params[1]);
System.out.println(a.gcd(b));
}
}
}
Date
2017 年 3 月 6 日