A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hoyouly 中级黑马   /  2013-8-4 10:47  /  1050 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-8-5 18:48 编辑

菜鸟一枚,刚学习java, 昨天计算这个关于水仙花题,可是不知道怎么回事,就是没有整出来,当局者迷,旁观者清,请各位学友帮帮忙,下面是我的代码/*
        水仙花数:是指一个三位或以上的数字,
        它的每个位上的数字的n次幂之和等于它本身。
        例如:153=1*1*1+5*5*5+3*3*3
    需求1:判断用户输入的三位数是不是水仙花数
    需求2:求100-1000之间的水仙花数。
        
        思路:
        1.输入一个整数,得到是几位数。
        2.定义一个方法,求得一个整数的n次幂
        3.把这个数的各个位数求出来,然后求得n次幂之和
        4.与这个数想比较。相等就是水仙花数
*/


import java.util.*;
class  NarcissisticNumber
{
        public static void main(String[] args)
        {
                Scanner in =new Scanner (System.in);
                sop("请输入一个三位或者以上的数字:");
                int number=in.nextInt();

                boolean temp=isNarcissiticNumber(number);
                sop("temp="+temp);
                if(isNarcissiticNumber(number))
                        sop(number+" 是水仙花数");

                else sop(number+" 不是水仙花数");
               
        }
        //获取一个整数的位数
        public static int weishu(int x)
        {
                int n=1;
                int count=1;
                while(x>10*n-1)
                {                        
                                n=n*10;
                                count++;                        
                }
                return count;
        }
        
        //求得整数x的n次方
        public static int nCiFang(int x,int n)
        {
                int sum=1;
                for(int i=0;i<n;i++)
                {
                        sum=sum*x;
                }
                return sum;
        }
        //判断是不是水仙花数
        public static boolean isNarcissiticNumber(int x)
        {
                boolean b;
                int w=weishu(x);
                int sum=0;
                while(x>0)
                {
                        int i=x%10;
                        sum=nCiFang(i,w)+sum;
                        x=x/10;
                }
                //sop("sum="+sum);
                if (sum==x)
                {
                        b=true;
                }
                else b=false;
                return b;
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
}


可是不知道怎么回事,判断水仙花哪个方法 isNarcissiticNumber(int x)中的if 语句好像没有执行,这个判断一直是false,望各位帮忙,谢谢了

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

4 个回复

倒序浏览
围观...。
回复 使用道具 举报
错误在:
isNarcissiticNumber这个方法的if (sum==x){ b=true;}这句

因为你在while循环中,已经将x的值改变,走到if判断的时候,x的值肯定是小于或者等于0的
所以sum==x不可能成立所以你一直return的是false

在你代码的基础上,建议在isNarcissiticNumber这个方法里,先将申明变量保存x的值,不要修改变量x的值
  1. //判断是不是水仙花数
  2. public static boolean isNarcissiticNumber(int x)
  3. {
  4. boolean b;
  5. int temp =x;
  6. int w=weishu(x);
  7. int sum=0;
  8. while(temp>0)
  9. {
  10. int i=temp%10;
  11. sum=nCiFang(i,w)+sum;
  12. temp=temp/10;
  13. }
  14. //sop("sum="+sum);
  15. if (sum==x)
  16. {
  17. b=true;
  18. }
  19. else b=false;
  20. return b;
  21. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
  1. import java.util.*;
  2. class  Demo
  3. {
  4.          public static void main(String[] args)
  5.         {
  6.                  Scanner in =new Scanner (System.in);
  7.                  sop("请输入一个三位或者以上的数字:");
  8.                  int number=in.nextInt();

  9.                 boolean temp=isNarcissiticNumber(number);
  10.                  sop("temp="+temp);
  11.                  if(isNarcissiticNumber(number))
  12.                          sop(number+" 是水仙花数");

  13.                 else sop(number+" 不是水仙花数");
  14.                  
  15.         }
  16.          //获取一个整数的位数
  17.          public static int weishu(int x)
  18.          {
  19.                  int n=1;
  20.                  int count=1;
  21.                  while(x>10*n-1)
  22.                  {                        
  23.                                 n=n*10;
  24.                                  count++;                        
  25.                 }
  26.                  return count;
  27.          }
  28.          
  29.         //求得整数x的n次方
  30.          public static int nCiFang(int x,int n)
  31.          {
  32.                  int sum=1;
  33.                  for(int i=0;i<n;i++)
  34.                  {
  35.                          sum=sum*x;
  36.                  }
  37.                  return sum;
  38.          }
  39.          //判断是不是水仙花数
  40.          public static boolean isNarcissiticNumber(int x)
  41.          {
  42.                   int y =x;//x的值在下面的while循环中发生了变量,定义一个变量y接收x的值
  43.                  boolean b;
  44.                  int w=weishu(x);
  45.                  int sum=0;
  46.                  while(x>0)
  47.                  {
  48.                          int i=x%10;
  49.                          sum=nCiFang(i,w)+sum;
  50.                          x=x/10;
  51.                  }
  52.                  sop("sum="+sum);
  53.                  if (sum==y)//让y和sum比较
  54.                  {
  55.                          b=true;
  56.                  }
  57.                  else
  58.                                          b=false;
  59.                  return b;
  60.          }
  61.          public static void sop(Object obj)
  62.          {
  63.                  System.out.println(obj);
  64.          }
  65. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
水仙花  你有必要做这么 麻烦么?
水仙花是三位数,你直接获得这个三位数的  每一位的值  再进行判断不就OK 了么?
               下面是代码,100-1000的水仙花
                for(int x=100; x<=999; x++)
                {                        
                        int bw = x/100;  // 百位值是  X/10/10%10
                        int sw = x/10%10; // 十位值是  x/10%10
                        int ge = x%10; // 个位值是 x%10
                        if(bw*bw*bw+sw*sw*sw+ge*ge*ge==x) // 直接判断不多说
                        {                                
                                System.out.println(x); // x就是水仙花啊
                        }                        

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马