第一种:从小到大完全遍历
import java.util.Scanner ;
public class Test1 {
public static void main ( String [ ] args ){
Scanner scan = new Scanner ( System.in ) ;
System.out.println("输入两个数n m ,结果分别返回n m的最大公约数和最小公倍数") ;
while( true ) { //等价于for(;;)
int n = scan.nextInt( ) ;
int m = scan.nextInt( ) ;
int a = 0 ; //a是最大公约数计数器
int b = 0 ; //b是最小公倍数计数器
int min1 = (n>=n)? n:m ;
for( int i = 1 ; i<= min1 ; i++){
if( n%i == 0){
if( m%i == 0 )
a = i ;
}
} System.out.println( "最大公约数为" + a ) ;
b = (n/a) * (m/a) * a ;
System.out.println( "最小公倍数为" + b ) ;
System.out.println(" 输入J继续,输入T退出") ;
String ee1 = scan.next( ) ;
char tt1 = ee1.charAt(0) ;
if ( tt1 == 'T' ) System.exit(0) ;
System.out.println("******************************************"+'\n'+'\n'+'\n'+'\n'+"重新输入n m") ;
}
}
}
运行结果
第二种:部分遍历,找到结果就break
import java.util.Scanner ;
public class Test1 {
public static void main ( String [ ] args ){
Scanner scan = new Scanner ( System.in ) ;
System.out.println("输入两个数n m ,结果分别返回n m的最大公约数和最小公倍数") ;
int f = 1 ;
while( f>0 ) {
int n = scan.nextInt( ) ;
int m = scan.nextInt( ) ;
int a = 0 ; //a是最大公约数计数器
int b = 0 ; //b是最小公倍数计数器
int min = (n>=n)? n:m ;
/*******************************************************************************/
for( int i = min ; i>0 ; i--){
if( m%i == 0 && n%i == 0 ){
a = i ;
break ;
}
}/*****************************************************************************/
System.out.println( "最大公约数为" + a ) ;
b = (n/a) * (m/a) * a ;
System.out.println( "最小公倍数为" + b ) ;
System.out.println(" 输入J继续,输入T退出") ;
String ee1 = scan.next( ) ;
char tt1 = ee1.charAt(0) ;
if ( tt1 == 'T' ) System.exit(0) ;
System.out.println("******************************************"+'\n'+'\n'+'\n'+'\n'+"重新输入n m") ;
}
}
}
for循环从最高处往下遍历,找到的第一个公约数即为最大公约数,找到后直接break跳出循环