【Java学习之代码学习】 Prog10_公约数和公倍数问题

这里写图片描述
每个人都会经历这样的阶段:开始意识到自己的平庸与局限,看着很多不切实际的可能性正逐渐被关闭,与此同时又会觉得不甘心。希望与失望反复交叠,变得焦虑与迷茫。其实,自我怀疑与自我期许正是硬币的两面,打破怀疑、印证期许,恰恰是成长中最重要的环节之一。早安!

█ Java问题:

今日的每日一题也是一个算术题:输入两个正整数m和n,求其最大公约数和最小公倍数。

█ 代码贴图:

########################################################

这里写图片描述

########################################################

package test;

import java.util.Scanner;

/**
 * 每日一题:
 * 输入两个正整数m和n,求其最大公约数和最小公倍数。
 * 
 * Date:11.16
 *
 */
public class Prog10最大公约最小公倍 {

    public static void main(String[] args) {
        while(true){
            System.out.println("输入第一个数:");
            int m = getInputNum();
            if(m==0)break;
            if(m>0){
                System.out.println("输入第二个数:");
                int n = getInputNum();
                if(n==0)break;
                if(n>0){
                    // 最大公约数
                    int maxCommonDivisor = maxCommonDivisor(m, n);
                    // 最小公倍数:由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积
                    // 所以最小公倍数=两个数的乘积除以最小公倍数
                    int minCommonMultiple = m * n / maxCommonDivisor;
                    System.out.println(m + "和" + n + "的最大公约数为" + maxCommonDivisor);
                    System.out.println(m + "和" + n + "的最小公倍数为" + minCommonMultiple);
                }
            }
        }

    }


    /**
     * 仿照涛哥封装的方法,得到输入的整数,或者退出程序的指令
     * @return 0:退出程序  -1:输入非法  num:输入的正整数
     */
    private static int getInputNum(){
        Scanner in = new Scanner(System.in);
        int num = -1;
        if (in.hasNextInt()) {
            num = in.nextInt();
            if(num<=0){
                num = -1;
                System.err.println("输入的"+num+"为非正整数数。");
            }
        } else if ("exit".equals(in.next())) {
            num = 0;
            in.close();
            System.out.println("退出成功~");
        } else{
            System.err.println("输入为非整数");
        }

        return num;

    }


    /**
     * 求最大公约数 ,辗转相除法:
     * 首先明白几个概念: 被除数÷除数=商 (15%3 的话,则15是被除数,3是除数) A除B 表示B是被除数 A是除数
     * (15%3的话,表示3除15)
     * 
     * 求法:当两个数都较大时,采用辗转相除法比较方便. 其方法是:  
     * 以小数除大数,如果能整除,那么小数就是所求的最大公约数 否则就用余数来除刚才的除数; 再用这新除法的余数去除刚才的余数.
     * 依此类推,直到一个除法能够整除,这时作为除数的数就是所求的最大公约数.
     * 
     * @param m
     * @param n
     */
    private static int maxCommonDivisor(int m, int n) {
        int temp = 1;
        // 确保m>n,否则交换位置,结果为:m是大数,n是小数
        if (m < n) {
            temp = m;
            m = n;
            n = temp;
        }

        // 以小数除大数,如果能整除,那么小数就是所求的最大公约数(m%n)
        // 如果余数是0,则代表小数n是就是最大公约数。
        // 如果余数不是0,则用余数除刚才的除数。(除数%余数)
        // 以此类推,只到余数是0,
        // 则除数就是最大公约数
        while (n != 0) {
            temp = m % n;
            m = n; // 除数
            n = temp;// 余数
        }
        return m;
    }

}

Good morning everyone! Be very careful about what you think. Your thoughts run your life. Bon courage!

PS :本篇文章内容不是自己写的,是从崔老师发出来的内容中稍微整理后的博客,顶部的贴图来自微信公众号【人民日报】,最后的一段话,是来自王老师、吴老师的心灵鸡汤!
 

█ 相关资料:

1.人民日报 微信公众号

来了!新闻早班车-人民日报 微信公众号
连接:http://mp.weixin.qq.com/s/XvQdw7WUdfHexnpxuY_HzQ

2.金老师的建议:

a、接口类:采用JavaBean+Interface+Dao的形式来定义,即,实体对象+Interface+Dao。 如:用户对象接口类: UserInterfaceDao,其中xxx为模块名称。
b、实现类:采用JavaBean+Interface+Impl+Dao的形式来定义,即,实体对象+Interface+Impl+Dao。 如:用户对象实现类:UserInterfaceImplDao。
Dao层命名规则
一般接口命名规则可以在最开始加上大写字母I,其实现类末尾加上Impl,这样可以很容易根据命名来区分是接口,还是普通类,还是实现类,前面的大写I表示Interface,后面的Impl表示Implementation

3.崔老师的建议:

大家如果想把Eclipse中的代码全部截屏的话,可以使用这个工具
这里写图片描述
整页代码截屏,这个工具可以滚动截屏。

在实际开发工作中,是一个团队一起工作,如果团队员的代码不宜读的话,难免会造成低效率的工作,不宜修改和维护。建议将代码写得更简洁去实现更复杂的算法。我们在练习的过程中也有点类似团队相互去读队友的代码,对代码进行审查,从而锻炼你们的编程思维和编程的效率。

PS :本篇文章使用的内容如果涉及到侵权问题、违反相关规则请联系我,立即删除。
  

转载请注明出处:http://blog.csdn.net/ljb568838953/article/details/53418410

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值