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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 涂金哲 中级黑马   /  2012-6-12 13:41  /  3240 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

要求一个数n,n的每一位数的n次幂之和等于n。153=1∧3+5∧3+3∧3或者1643=1∧4+6∧4+4∧4+3∧4,谢谢!

评分

参与人数 1黑马币 +10 收起 理由
黄奕豪 + 10

查看全部评分

11 个回复

正序浏览
本帖最后由 吴扬 于 2012-6-12 20:38 编辑

有很多教材上都有这个题目,下面是我实现的代码,做个参考,如果大家还有效率更高的方法,可以一起学习下,呵呵!

public class NarcissusNum {
        public static void main(String[] args) {
        printNarcissusNum();
        }
        
        public static void printNarcissusNum()
        {
                for(int i = 1; i <= 1000; i++)
                {
                        int a = i/100;         //将整数除以100取整数,这样就可以获取百位上的数
                        int b = (i%100)/10;   //将整数除以100取余数,在除以10取整,可以获取十位上的数
                        int c = (i%100)%10;  //同样,将整数除以100取余数,再除以10取余数,就是个位上的数
                        
                        if(i == (a*a*a + b*b*b + c*c*c))   //判断i是否和它百位,十位,个位数上的立方和是否相等
                        {
                                System.out.println(i);
                        }
                }
        }

}
回复 使用道具 举报
public class Test {
        public static void main(String[] args) {
                     int b1, b2, b3;                         //b1代表个位数,b2代表十分位数,b3代表百分位数
                     for(int n=101; n<1000; n++) {
                              b3 = n / 100;
                              b2 = n % 100 / 10;
                              b1 = n % 10;
                              if((b3*b3*b3 + b2*b2*b2 + b1*b1*b1) == n) {
                                      System.out.println(n+"是一个水仙花数");
                        }
                     }
        }
}   
回复 使用道具 举报
本帖最后由 郭永岳 于 2012-6-12 19:42 编辑
  1. public static void main(String[] args) {
  2.                 int a;
  3.                 for (a = 1; a < 999; a++) {
  4.                         boolean yes=false;
  5.                         if (((a / 100) * (a / 100) * (a / 100)+ ((a / 10) % 10) * ((a / 10) % 10)
  6.                                         * ((a / 10) % 10)+(a % 10) * (a % 10)
  7.                                         * (a % 10)) == a)
  8.                                 yes = true;
  9.                
  10.                         if (yes)
  11.                                 System.out.println(a);
  12.         
  13.         }

  14. }

  15. 呵呵,我也忘记啦,这个是我在百度上找到的。现在我也搞懂啦,谢谢你的提问哦。感觉这个程序很好,希望对你也有帮助。
复制代码
回复 使用道具 举报
张頔 中级黑马 2012-6-12 16:43:00
9#
public class test1 {
     public static void main(String[] args) {
             for(int i=100;i<=999;i++){
                     int j = (int) (Math.pow(i/100,3)+Math.pow(i/10%10,3)+Math.pow(i%100%10,3));//Math.pow(int i,int j)  i的j次幂
                     if(i==j){
                             System.out.println(i);
                     }
                     else
                             continue;
             }
     }
}
回复 使用道具 举报
for(int i=100;i<1000;i++)
{
bai=i/100;  //百位上的数字
shi=i/10%10;  //十位上的数字
ge=i%10;  //个位上的数字
if(i==(bai*bai*bai+shi*shi*shi+ge*ge*ge))
System.out.println(i);
   }
回复 使用道具 举报
刘笑 中级黑马 2012-6-12 14:25:51
7#
解此题的关键是怎能样从一个三位数中分离百位数、十位数、个位数。可以这样做,设该三位数以i代表,由a,b水仙花数,c三个数字组成。
(1)百位数字a:a=int(i/100).
(2)十位数字b:b=int((i-100*a)/10)
(3)个位数字c:c=i-int(i/10)*10.
代码如下:
public class Shuixianhua {
public static void main(String[] args) {
int a=0;
int b=0;
int c=0;
for(int i=100;i<999;i++)
{
a=i/100;
b=i/10%10;
c=i%10;
if(i==(a*a*a+b*b*b+c*c*c))
System.out.println(i);
   }
}

我觉得我的程序最简单明了!哈哈
回复 使用道具 举报
  1. public class ShuiXianHua {
  2.        
  3.         public static void main(String[] args)
  4.         {
  5.                  int geWei,shiWei,baiWei;
  6.                  int tempB,tempS;
  7.           for(int i=100;i<=999;i++)
  8.           {
  9.                   baiWei=i/100;
  10.                   
  11.                   tempB = baiWei*baiWei*baiWei;
  12.                   if(tempB > i) continue;
  13.                  
  14.                   shiWei=(i-baiWei*100)/10;
  15.                   tempS = shiWei*shiWei*shiWei;
  16.                  
  17.                   if((tempS + tempB) > i) continue;
  18.                   geWei=i-baiWei*100-shiWei*10;

  19.                   
  20.                   if(i==geWei*geWei*geWei+tempS+tempB)
  21.                    {
  22.                     System.out.println(i);
  23.                   
  24.                    }
  25.           }

  26.         }

  27. }
复制代码
这样效率会不会 稍稍高一点?
回复 使用道具 举报
public class Narcissusnum{
    public static void main(String [] args)
   {
       int i,j,k,n;
       printf("'narcissus'number is:");
       for(n=100;n<1000;n++)
      {
         i=n/100;
         j=n/10%10;
         k=n%10;
         if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
        {
            printf("%-5d",n);
        }
    }
         printf("\n");
}
回复 使用道具 举报
  1. public static void main(String[] args) {
  2.                 int i, j, k, n;
  3.                 System.out.println("水仙花数是:");
  4.                 for (n = 100; n < 1000; n++) {
  5.                         i = n / 100; /* 分解出百位 */
  6.                         j = n / 10 % 10; /* 分解出十位 */
  7.                         k = n % 10; /* 分解出个位 */
  8.                         if (n == i * i * i + j * j * j + k * k * k) {
  9.                                 System.out.println("   " + n);
  10.                         }
  11.                 }
  12.                 System.out.println("\n");

  13.         }
复制代码
回复 使用道具 举报
public class ShuiXianShu
{

/**
  * 题目:打印出100-999之间所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
  * 例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
     * 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。*
  */
public static void main(String[] args)
{
  for(int i=100;i<=999;i++)
  {
   int geWei,shiWei,baiWei;
   baiWei=i/100;
   shiWei=(i-baiWei*100)/10;
   geWei=i-baiWei*100-shiWei*10;
   if(i==geWei*geWei*geWei+shiWei*shiWei*shiWei+baiWei*baiWei*baiWei)
   {
    System.out.println(i);
   }
  }

}

}
这个是我以前做过的,楼主可以参考一下!
回复 使用道具 举报
本帖最后由 王明明 于 2012-6-12 14:11 编辑

public class num
{
            public static void main(String[]args)
            {
                int i;
                int j;
                int k;
                int n;
                for (n=100;n<=1000;n++)
                {
                      i=n/100;
            j=(n-i*100)/10;
                      k=n%10; // %取模 也就是取一个数的余数
               
                if (i*i*i+j*j*j+k*k*k==n)
                {
                    System.out.println(n);
                }
            }
            }
}

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1

查看全部评分

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