各位大哥大姐大叔大嫂教教我呀:如何用JAVA语言实现求三个正整数的最小公倍数。请写完整代码,并有便于菜鸟理解的注释。(因为本人比教菜,看不出一些基本的书写错误,所以代码务必要通过编译能够运行),万分感谢!!!!!!!!!!!!!!!
解决方案 »
- BufferedReader的read和DataInputStream的readUTF()在是否阻塞上的区别
- 求助:
- 请问各位高手,java里面字符串过长了怎么解决?
- 紧急求救!关于用SWING编写文本编辑器。
- 请 caoxmby(一切都变得没有意义..........) 看过来!!!!
- 同一对象加载多个监听出错,是不允许?还是其它原因??
- 编译中碰到这个问题
- 面试题:求教数字连连看算法!
- 对jdk中String类的源代码的一点疑问?
- Beginning Java 2(JDK 1.4 Edition )的汉文出了吗?
- 怎样在JTextArea中光标定位处实现粘贴的功能?
- 新手问ServerSocket.accept()的一个问题
-----------------------------------
public class MiniMultip {
private int i,j,k;
private int miniMultip;
public MiniMultip(int i,int j, int k){
this.i = i;
this.j = j;
this.k = k;
}
public void cal(){
int max = max();
for(int mult=1; ; mult++){
int tmp = max*i;
if(tmp%i==0 && tmp%j==0 && tmp%k==0){
miniMultip = tmp;
return;
}
}
}
public int getMin(){
return miniMultip;
}
private int max(){
int tmp = i;
if(tmp < j)
tmp = j;
if(tmp < k)
tmp = k;
return tmp;
}
public static void main(String args[]){
MiniMultip mm = new MiniMultip(10,34,17);
mm.cal();
System.out.println(mm.getMin());
}
}
那你给出的代码怎么修改一下让它实现求解“任意”的三个正整数的最小公倍数呢?
麻烦你告诉我,感谢了!!!!
private static int getMaxCommonDivisor(int nNum1, int nNum2)
{
int a = Math.min(nNum1,nNum2);
int b = Math.max(nNum1,nNum2);
int c = a;
while (c!=0)
{
a = c;
c = b%a;
b = a;
}
return a;
}
//最小公约数
private static int getMinCommonMultiple(int nNum1, int nNum2)
{
return (nNum1*nNum2/getMaxCommonDivisor(nNum1, nNum2));
}
//求多个数的最大公约数与最小公倍数
private static int[] getCommon(int[] nArr)
{
int nMaxCommonDivisor = 0;
int nMinCommonMultiple = 0;
if (nArr != null && nArr.length>1)
{
nMaxCommonDivisor = getMaxCommonDivisor(nArr[0],nArr[1]);
nMinCommonMultiple = getMinCommonMultiple(nArr[0],nArr[1]);
for(int n=2; n<nArr.length; n++)
{
nMaxCommonDivisor = getMaxCommonDivisor(nMaxCommonDivisor,nArr[n]);
nMinCommonMultiple = getMinCommonMultiple(nMinCommonMultiple,nArr[n]);
}
}
return new int[]{nMaxCommonDivisor,nMinCommonMultiple};
}
public class TestNumber {
private int i,j,k,tmp1,tmp2; /**
* @param args
*/
public TestNumber(int i,int j,int k){
this.i=i;
this.j=j;
this.k=k;
}
public void max(int i,int j){
if(i>j){
tmp1 =i;
tmp2 =j;
}
else{
tmp1 =j;
tmp2 =i;
}
}
public int fun(int a,int b){
if(b==0)
return a;
else
return fun(b,a%b);
}
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
TestNumber tn = new TestNumber(18,6,8);
tn.max(4,6);
int p =tn.fun(tn.tmp1,tn.tmp2);
tn.max(6,8);
int q =tn.fun(tn.tmp1,tn.tmp2);
tn.max(p,q);
int s =tn.fun(tn.tmp1,tn.tmp2);
System.out.println("最大公约数为 : "+s);
int g =tn.i*tn.j*tn.k/(s*s);
System.out.println("最小公倍数为 : "+g);
}}
public static void main(String[] args) throws Exception
{
//要处理的数组
int[] nArr = new int[]{12,5,30};
//narr[0]是最大公约数,narr[1]最小公倍数
int[] narr = getCommon(nArr);
System.out.println(narr[0]+","+narr[1]);
}
//最大公倍数
private static int getMaxCommonDivisor(int nNum1, int nNum2)
{
int a = Math.min(nNum1,nNum2);
int b = Math.max(nNum1,nNum2);
int c = a;
//欧几里德算法
while (c!=0)
{
a = c;
c = b%a;
b = a;
}
return a;
}
//最小公约数
private static int getMinCommonMultiple(int nNum1, int nNum2)
{
//两数相乘除以最大公约数
return (nNum1*nNum2/getMaxCommonDivisor(nNum1, nNum2));
}
//求多个数的最大公约数与最小公倍数
private static int[] getCommon(int[] nArr)
{
int nMaxCommonDivisor = 0;
int nMinCommonMultiple = 0;
if (nArr != null && nArr.length>1)
{
//算出前两个数的最大公约数与最小公倍数
nMaxCommonDivisor = getMaxCommonDivisor(nArr[0],nArr[1]);
nMinCommonMultiple = getMinCommonMultiple(nArr[0],nArr[1]);
//对数组循环从下标2开始
for(int n=2; n<nArr.length; n++)
{
//利用已算出的最大公约数与最小公倍数再计算
nMaxCommonDivisor = getMaxCommonDivisor(nMaxCommonDivisor,nArr[n]);
nMinCommonMultiple = getMinCommonMultiple(nMinCommonMultiple,nArr[n]);
}
}
//返回最终结果
return new int[]{nMaxCommonDivisor,nMinCommonMultiple};
}