不要忽视小问题

任务描述

本关任务:从键盘接收2个整数a和b,输出a与b范围内的水仙花数。

相关知识

1.水仙花数

水仙花数是指:一个n位数( n23 ),它的每个位上的数字的n 次所谓的水仙花数是指:一个n位数(N23),它的每个位上的数字的n次幂之和等于它本身幂之和等于它本身。

例如:153,370,371,407等都是水仙花数,就拿153来说,153 =111 +555 +333. 幂之和等于它本身.例如153,370,371,407等都是水仙花数,就拿153来说,153=111+55+33。 样例:

 
 
  1. public class ShuiXianHua {
  2. public static void main(String[] args) {
  3. //1.遍历所有的三位数
  4. for(int i=100;i<=999;i++){
  5. if(isAim(i)){//调用方法如果是水仙花数,就打印
  6. System.out.println(i);
  7. }
  8. }
  9. }
  10. //例 153
  11. public static boolean isAim(int a){
  12. int x=a/100;//结果取整 分解出百位数1
  13. int y=a/10%10;//分解出十位数 除10取证后为15 %10取余后为5
  14. int z=a%10;//直接对10取余得3
  15. if(a==x*x*x+y*y*y+z*z*z){//判断是否为水仙花数
  16. return true;
  17. }
  18. return false;
  19. }
  20. }

编程要求

根据提示,在右侧编辑器补充代码,从键盘接收2个整数a和b,输出a与b范围内的水仙花数。

测试说明

平台会对你编写的代码进行测试:

测试输入:

1

200 预期输出: 1

153

测试输入:

2

6 预期输出: 2~6范围内无水仙花数!


开始你的任务吧,祝你成功!

这个问题看似十分简单,只要用到while加上“/”符号就可以把一个数的每个位数都被当做个位数提取出来

while(m != 0){
      sum += (m % 10) * (m % 10) * (m % 10);
      m = m / 10;
    }

看起来就是这么回事了但是

package step4;

import java.util.Scanner;

public class narcissisticNumber {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //获取起始范围
        int i = scanner.nextInt();
        //获取终止范围
        int j = scanner.nextInt();
        // ---------------------Begin------------------------
        int sum = 0;
        int n = 0;      
        for(int k = i ; k <= j ; k ++){
            while( k != 0 ){
                 int sum += ( k % 10 ) * ( k % 10 ) * ( k % 10 );
                 k = k / 10;
                }
            if(sum == k){
               System.out.println(k);
               n ++;
            }
         }

         if(n == 0)
             System.out.println(i + "~" + j +"范围内无水仙花数!");
        // ---------------------End------------------------
    }
}

你发现了问题吗?

数据溢出了。我没有在一个数字(各个位数数字提取)的循环结束后的把k和sum给清除,但是幸好我问了老师,老师指出了我的问题(没问老师的话,我将会搞到地老天荒)。

请一定要记住

1.不要去改动for循环(while循环也一样)里面的执行条件,要用到那个数值就创建了一个新的参数来接收。如本题。

2.改变了参数的数值不用了的参数最好及时清理掉,小心内存溢出。

3.模块化,多注意这些“不小心”导致的问题,不然遇到的时候很难找到。(把问题拆开来积累,不要揉成一团)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值