水仙花数和完全数--for while if 结合

通过练习水仙花数和完全数,掌握相应的知识点

  • for语句的相关表达式
  • while语句格式
  • if语句的语法
package arithmetic;
/**
 *  讲解的相关算法有
 *          1、水仙花数
 *          2、完全数
 *
 * @author sunRainAmazing
 *
 */
public class JavaArithmetic {
    public static void main(String[] args) {
        //测试水仙花数
//      getNarcissisticNumberByFor();
//      getNarcissisticNumberByWhile();

        //测试完全数
//      isPerfectNumber(7);
        getPerfectNumber();
    }
    /**
     * 求100-1000之内的水仙花数题目
     * 所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。 
     * 例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方
     * 1.程序分析:
     *      利用for循环控制100-1000个数,
     *      每个数分解出个位,十位,百位。
     */
    public static void getNarcissisticNumberByFor(){
        for (int i = 100; i < 1000; i++) {
            int  the=i%10;      //个位数
             int unit=i/10%10;//十位数
             int decade=i/100;//百位数
             //水仙花条件
             if(the*the*the+unit*unit*unit+decade*decade*decade==i){
                 System.out.println("水仙花数  :" + i);
             }
        }
    }



    /**
     * 采用while的形式,当然页可以采用do while的形式
     */
    public static void getNarcissisticNumberByWhile(){
        int i = 100;
        while ( i < 1000) {
            int  the=i%10;      //个位数
             int unit=i/10%10;//十位数
             int decade=i/100;//百位数
             //水仙花条件
             if(the*the*the+unit*unit*unit+decade*decade*decade==i){
                 System.out.println("水仙花数  :" + i);
             }
            i++;
        }
    }
    /**
     * 完全数(Perfect number),
     *          又称完美数或完备数,是一些特殊的自然数。
     * 它所有的真因子(即除了自身以外的约数)的和(即因子函数),
     *  恰好等于它本身。
     * 如果一个数恰好等于它的因子之和,则称该数为“完全数”。
     *          如 6 = 1 + 2 + 3
     * 
     *      判断是否为完全数
     */
    public static void isPerfectNumber(int number){
        int sum=0;//用于接收因子的和
        for (int i = 1; i < number; i++) {
            if(number%i==0){
                sum+=i;
            }
        }
        if(sum==number){
            System.out.println(number+"是完全数");
        }else{
            System.out.println(number+"不是完全数");
        }
    }




    /**
     * 输出1-1000以内的完全数
     */
    public static void getPerfectNumber(){
        int number=1;
        while(number<1000){
            int sum=0;
            int num=number++;//每计算一次自增1
            for (int i = 1; i < num; i++) {
                if(num%i==0){
                    sum+=i;
                }
            }
            if(sum==num){
                System.out.println(num+"是完全数");
            }
        }
    }


}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值