*程序设计方法学
*作业二*2018.9.6
*最大公约数和最小公倍数
题目:求两个正整数的最大公约数和最小公倍数。
基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出。
提高要求:1.三种以上算法解决两个正整数最大公约数问题。
2.求3个正整数的最大公约数和最小公倍数。
import java.util.Scanner;
/**
* 最大公约数与最小公倍数(作业二)
* 辗转相除法(算法一)
* @author Ran
*
*/
public class Homework2_1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个正整数");
int a=sc.nextInt();
System.out.println("请输入第二个正整数");
int b=sc.nextInt();
calculate(a,b); //计算
}
//计算最大公约数
private static void calculate(int a, int b) {
int max,min;
if(a>b){ //若a大于b
max=a;
min=b;
}else{ //若a小于b
max=b;
min=a;
}
while(min!=0){ //当a、b中的较小值不为0时
int temp=max;
max=min; //取余数
min=temp%min;
}
System.out.println(a+"和"+b+"的最大公约数为"+max);
//计算最小公倍数
//(公式:(最小公倍数等于a乘b除以最大公约数)
System.out.println(a+"和"+b+"的最小公倍数为"+a*b/max);
}
}
import java.util.*;
/**
* 最大公约数与最小公倍数(作业二)
* 相减法(算法二)
* @author Ran
*
*/
public class Homework2_2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个正整数");
int a=sc.nextInt();
System.out.println("请输入第二个正整数");
int b=sc.nextInt();
int max = Subtraction(a,b); //计算最大公约数max
System.out.println(a+"和"+b+"的最大公约数为"+max);
//计算最小公倍数
//(公式:(最小公倍数等于a乘b除以最大公约数)
System.out.println(a+"和"+b+"的最小公倍数为"+a*b/max);
}
//计算最大公约数
public static int Subtraction(int a,int b){
while(a!=b){ //当a不等于b时
if(a>b){
a=a-b; //若a>b
}else{
b=b-a; //若a<b
}
}
return a;
}
}
import java.util.Scanner;
/**
* 最大公约数与最小公倍数(作业二)
* 穷举法(算法三)
* @author Ran
*
*/
public class Homework2_3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个正整数");
int a=sc.nextInt();
System.out.println("请输入第二个正整数");
int b=sc.nextInt();
//计算最大公约数max
int max=1;
int i;
for(i=2;i<=a&&i<=b;i++){ //i小于等于a和b
if(a%i==0&&b%i==0){ //若i可同时被a、b所整除
max=i;
}
}
System.out.println(a+"和"+b+"的最大公约数是"+max);
//计算最小公倍数
//(公式:(最小公倍数等于a乘b除以最大公约数)
System.out.println(a+"和"+b+"的最小公倍数是"+a*b/max);
}
}
import java.util.Scanner;
/**
* 最大公约数与最小公倍数(作业二)
* 辗转相除法(三个整数)
* @author Ran
*
*/
public class Homework2_4 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个正整数");
int a=sc.nextInt();
System.out.println("请输入第二个正整数");
int b=sc.nextInt();
System.out.println("请输入第三个正整数");
int c=sc.nextInt();
System.out.println(a+"、"+b+"和"+c+"的最大公约数为"+max(a,b,c));
System.out.println(a+"、"+b+"和"+c+"的最小公倍数为"+min(a,b,c));
}
//计算前两个数的最大公约数
public static int max(int a,int b){
int x,y,z,temp;
x=a;
y=b;
if (x<y){ //如果a<b,则调换位置。
temp=x;
x=y;
y=temp;
}
while(x%y!=0){ //当a除以b的余数不等于0,将较小的数取出来除以余数
z=x%y;
x=y;
y=z;
}
return y;
}
//计算前两个数的最小公倍数
//(公式:(最小公倍数等于a乘b除以最大公约数)
public static int min(int a ,int b){
return a*b/max(a,b);
}
//计算三个数的最大公约数
public static int max(int a,int b,int c){
return max(max(a, b),c);
}
//计算三个数的最小公倍数
public static int min(int a,int b,int c){
return min(min(a,b),c);
}
}