每天一個java小程序-6

 JAVA練習題,能做多少就做多少。http://bbs.csdn.net/topics/110067294


這個是從CSDN看到的。每天一個吧 。

【程序6】 
題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。 
1.程序分析:利用輾除法。 

我用的還是求素數的方法

==== Main.java ====
package main;

import common.Common;
import num.Num;

public class Main {

public static void main(String[] args) {
Num num1 = new Num(100);
Num num2 = new Num(90);
Common func = new Common();

num1.decNum();
num2.decNum();

func.cntValue(num1.getDecNumList(), num2.getDecNumList());

System.out.println("Greate div mum is " + func.getGreateDiv());
System.out.println("Least mul mum is " + func.getLeastMul());

}

}

==== Num.java ====
package num;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Num {
public Num(int num) {
this.num = num;
if (primeList == null) {
primeList = new ArrayList();
primeList.add(2);
primeList.add(3);
initPrimeList();
}
}

private static void initPrimeList() {
int i;
boolean isPrime = true;

for (i = 3; i <= 1000; i++) {
Iterator it = primeList.iterator();
while (it.hasNext()) {
int tmp = (int) it.next();
if ((i % tmp) == 0) {
isPrime = false;
break;
}
}

if (isPrime) {
primeList.add(i);
} else {
isPrime = true;
}
}

}

public void decNum() {
Iterator it = primeList.iterator();

if (decNumList == null) {
decNumList = new ArrayList();
}

while (it.hasNext()) {
int tmp = it.next();
while ((num % tmp) == 0) {
decNumList.add(tmp);
num = num / tmp;
}
}

if (num != 1)
decNumList.add(num);
}

public List getDecNumList() {
return decNumList;
}

private int num;
private List decNumList;
private static List primeList;
}

==== Common.java ====
package common;

import java.util.Iterator;
import java.util.List;

public class Common {
public void cntValue(List list1, List list2) {
greateDiv = 1;
leastMul = 1;
Iterator it = list1.iterator();

while (it.hasNext()) {
int tmp = it.next();

if (list2.contains(tmp)) {
greateDiv = greateDiv * tmp;
list2.remove(list2.indexOf(tmp));
} else {
leastMul = leastMul * tmp;
}
}

it = list2.iterator();
while (it.hasNext()) {
int tmp = it.next();
leastMul = leastMul * tmp;
}

leastMul = leastMul * greateDiv;
}

public int getGreateDiv() {
return greateDiv;
}

public int getLeastMul() {
return leastMul;
}

private int greateDiv;
private int leastMul;
}

太晚了。。。所以,算是充數的吧。。。寫的不咋地。。

list2.remove(list2.indexOf(tmp));
這個,本來是可以直接remove(object)的,但是恰好我的object就是int,導致remove的參數成了index,所以很蛋疼的中間轉換了一次。。。。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章