首页 > 学院 > 开发设计 > 正文

【九度OJ】题目1056:最大公约数 解题报告

2019-11-06 06:26:42
字体:
来源:转载
供稿:网友

【九度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 日


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表