在此程序中,您將學(xué)習(xí)在Java程序查找兩個(gè)數(shù)字的最大公因數(shù)(GCD)。這是通過(guò)在if else語(yǔ)句的幫助下使用for和while循環(huán)來(lái)完成的。
兩個(gè)整數(shù)的HCF或GCD是可以精確地將兩個(gè)數(shù)相除(沒(méi)有余數(shù))的最大整數(shù)。
public class GCD { public static void main(String[] args) { int n1 = 81, n2 = 153, gcd = 1; for(int i = 1; i <= n1 && i <= n2; ++i) { // 檢查i是否是兩個(gè)整數(shù)的因數(shù) if(n1 % i==0 && n2 % i==0) gcd = i; } System.out.printf(" %d 和 %d 的最大公因數(shù)是 %d", n1, n2, gcd); } }
運(yùn)行該程序時(shí),輸出為:
81 和 153 的最大公因數(shù)是 9
在此,將要找到其最大公因數(shù)的兩個(gè)數(shù)字分別存儲(chǔ)在n1和n2中。
然后,執(zhí)行for循環(huán),直到i小于n1和n2為止。這樣,迭代1到兩個(gè)數(shù)字中最小的所有數(shù)字以找到最大公因數(shù)。
如果n1和n2都可被i整除,則將gcd設(shè)置為數(shù)字。 一直進(jìn)行到找到最大數(shù)(GCD),該數(shù)將n1和n2均除而無(wú)余數(shù)。
我們還可以使用while循環(huán)解決此問(wèn)題,如下所示:
public class GCD { public static void main(String[] args) { int n1 = 81, n2 = 153; while(n1 != n2) { if(n1 > n2) n1 -= n2; else n2 -= n1; } System.out.println("G.C.D = " + n1); } }
運(yùn)行該程序時(shí),輸出為:
G.C.D = 9
這是找到GCD的更好方法。在此方法中,從較大的整數(shù)中減去較小的整數(shù),然后將結(jié)果分配給保存較大整數(shù)的變量。這個(gè)過(guò)程一直持續(xù)到n1和n2相等。
僅當(dāng)用戶輸入正整數(shù)時(shí),以上兩個(gè)程序才能按預(yù)期工作。這是第二個(gè)示例的一些修改,可以找到正整數(shù)和負(fù)整數(shù)的GCD。
public class GCD { public static void main(String[] args) { int n1 = 81, n2 = -153; n1 = ( n1 > 0) ? n1 : -n1; n2 = ( n2 > 0) ? n2 : -n2; while(n1 != n2) { if(n1 > n2) n1 -= n2; else n2 -= n1; } System.out.println("G.C.D = " + n1); } }
運(yùn)行該程序時(shí),輸出為:
G.C.D = 9