Java水仙花数 (简单+优化双解)

目录

1.什么是水仙花数

2.低端程序员普通写法(开玩笑的)

优化方向:

3.稍微动了点脑的程序员之更上一层楼

以下是改进的优化版本,详情注释已解释


1.什么是水仙花数

水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(

例如:1^3 + 5^3+ 3^3 = 153)。

2.低端程序员普通写法(开玩笑的)

循环依次求出:个,十,百位上的数 ,当各位数的立方和等于该数,打印出来

下意识的解法,看似没有问题,但是有很大缺陷:

优化方向:

1.无法自由规定是几位数内的

2.无法超出当前位数

3.计算立方和的时候及其繁琐

4.不便于代码的修改 

 public static void main22(String[] args) {
        //水仙花数 0--999
        for (int num = 0;num<=999;num++) {
            int ge  = num%10;
            int shi  = num/10%10;
            int bai  = num/100%10;
            int res = ge*ge*ge+shi*shi*shi+bai*bai*bai;
            if(num==res){
                System.out.println(num);
            }
        }

3.稍微动了点脑的程序员之更上一层楼

以下是改进的优化版本,详情注释已解释

通过Scanner可以输入需要几位数以内的水仙花数

第一个while循环用来进行位数的运算,求出位数

第二个while循环用来计算出各个位上的数,和位数一起,求出立方和

当立方和等于该数时,打印出来,随后进入下一个循环

 public static void main(String[] args) {
        //水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (int i = 0; i <= n; i++) {  //从0开始依次递增(包含各位数,最小的百位数是153从百位数开始,i=100即可)
            int temp = i;              //用temp存储i,计算位数用temp,避免i改变
            int count = 0;             //count计数
            while (temp != 0) {         //当temp,也就是i不等于0时,对temp除10
                temp /= 10;          //依次去掉一个位数
                count++;                 //计算这个数的位数
            }
            int sum = 0;     //求和
            temp = i;   //temp 值已经改变,将i赋过去
            while (temp != 0) {
                sum += Math.pow(temp % 10, count);  //%10算出当前位置上的数字,与次数算出立方,在依次相加
                temp /= 10;        //依次去掉一个位数
            }
            if(sum==i){             //当sum,也就是各位的立方和等于i时,打印i
                System.out.println(i);
            }
        }
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值