用辗转相除法很简单
方法是大数除以小数,如果余数不为0,就用小数(原除数)再除以余数,直到没有余数时,此时的除数就是最大公约数。
比如243和375
375 / 243 = 1 …… 132
243 / 132 = 1 …… 111
132 / 111 = 1 …… 21
111 / 21 = 5 …… 6
21 / 6 = 3 …… 3
6 / 3 = 2
所以243和375的最大公约数是除数3
代码也很简单
C++:
#include <iostream>
#include <algorithm>
using namespace std;
int division(int a,int b)
{
if(a%b!=0){
division(b,a%b);
}else{
return b;
}
}
int main()
{
int a,b;
cin>>a>>b;
int maxx,minn;
maxx = max(a,b);
minn = min(a,b);
int x = division(maxx,minn);
cout<<x;
}
Java:
import java.io.BufferedInputStream;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Main m = new Main();
Scanner sc = new Scanner(new BufferedInputStream(System.in));
int a = sc.nextInt();
int b = sc.nextInt();
int max = Math.max(a, b);
int min = Math.min(a, b);
//System.out.print(m.division(max,min));
int res = m.division(max, min);
System.out.print(res);
}
int division(int a,int b){
if(a%b!=0){
return division(b,a%b);
}else{
return b;
}
}
}
几乎没啥不一样的地方,Java要注意每个分支都得有return。