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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 崔小旭 初级黑马   /  2014-9-24 12:16  /  1248 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

各个位上的数字的立方和等于其数值本身
        153
        1^3=1    5^3 = 125   3^3=27  
        水仙花数及统计其个数

7 个回复

倒序浏览
如下代码:
  1. package test;

  2. import java.util.ArrayList;
  3. import java.util.List;

  4. /**
  5. *
  6.       各个位上的数字的立方和等于其数值本身
  7.         153
  8.         1^3=1    5^3 = 125   3^3=27  
  9.         水仙花数及统计其个数
  10.         
  11. * @author java-dream
  12. *
  13. */
  14. public class Test2 {
  15.        
  16.         //该题对数值的范围没有限制,设以3位数范围内吧
  17.         public static void main(String[] args){
  18.                 //初始数值
  19.                 Integer number = 100;
  20.                 //用于存放符合条件的数值
  21.                 List<Integer> numBarrel = new ArrayList<Integer>();
  22.                
  23.                 //如果数值是3位数,则进行判断是否符合条件;否则终止循环
  24.                 while(number<1000){
  25.                         int n = 1;
  26.                         int index = 0;
  27.                         //用于存放number数值各个位的数
  28.                         int[] barrel = new int[3];
  29.                        
  30.                         while(number/n>=1){
  31.                                 //获取number数值各个位的数,并保存到barrel数组
  32.                                 barrel[index++] = (number/n)%10;
  33.                                 n *= 10;
  34.                         }
  35.                        
  36.                         //求得各个位的数的立方,并相加
  37.                         int sum = 0;
  38.                         for(int i=0; i<barrel.length; i++){
  39.                                 sum += barrel[i]*barrel[i]*barrel[i];
  40.                         }
  41.                        
  42.                         //各个位上的数字的立方和等于其数值本身,将该number保存
  43.                         if(sum==number){
  44.                                 numBarrel.add(number);
  45.                         }
  46.                        
  47.                         number++;
  48.                 }
  49.                
  50.                 System.out.println("水仙花数为:"+numBarrel);
  51.                 System.out.println("总共有:"+numBarrel.size()+"个");
  52.         }

  53. }
复制代码

运行结果:
  1. 水仙花数为:[153, 370, 371, 407]
  2. 总共有:4个
复制代码
回复 使用道具 举报
思路:其实就把它当着做数学运算题 一样! 比如计算3位数的.

  1. public class ShuiXianHuaShuTest {

  2.         public static void main(String[] args) {

  3.                 for (int i = 0; i <= 10000000; i++) {
  4.                        
  5.                         int geWei, shiWei, baiWei;
  6.                        
  7.                         baiWei = i / 100;
  8.                        
  9.                         shiWei = (i - baiWei * 100) / 10;
  10.                        
  11.                         geWei = i - baiWei * 100 - shiWei * 10;
  12.                        
  13.                         if (i == geWei * geWei * geWei + shiWei * shiWei * shiWei + baiWei
  14.                                        
  15.                                         * baiWei * baiWei) {
  16.                                
  17.                                 System.out.println(i);
  18.                                
  19.                         }
  20.                        
  21.                 }
  22.                
  23.         }
  24.        
  25. }
复制代码
回复 使用道具 举报
  1. package com.itheimaday19;

  2. /**
  3. 思路:
  4.                 
  5.         利用for循环控制100-999个数,每个数分解出个位,十位,百位。
  6. */

  7. public class ShuiXianHuaShuTest {

  8.         public static void main(String[] args) {

  9.                 int count=1;
  10.                
  11.                 for (int i = 100; i < 1000; i++) {
  12.                        
  13.                         int geWei, shiWei, baiWei;
  14.                        
  15.                         baiWei = i / 100;
  16.                        
  17.                         shiWei = (i - baiWei * 100) / 10;
  18.                        
  19.                         geWei = i - baiWei * 100 - shiWei * 10;
  20.                        
  21.                         if (i == geWei * geWei * geWei + shiWei * shiWei * shiWei + baiWei
  22.                                        
  23.                                         * baiWei * baiWei) {
  24.                                
  25.                                 System.out.println(i+"\t"+(count++)+"个");
  26.                                
  27.                         }
  28.                        
  29.                        
  30.                 }
  31.                
  32.         }
  33.        
  34. }
复制代码
回复 使用道具 举报
其实把每位上的数取出来,这个题差不多就解决了
回复 使用道具 举报
回复 使用道具 举报
  1. /*
  2. 思路:
  3.         1.水仙花数是指一个三位数:100——999,遍历

  4.         2.取出三位数的每一位;
  5.            比如:324
  6.                   个位:324 % 10 = 4
  7.                   十位:324 / 10 % 10 = 2
  8.                   百位:324 / 100 % 10 = 3
  9.                   千位:数字 / 1000 % 10 = 千位
  10.                   万位:数字 / 10000 % 10 = 万位

  11.         3.将每一位的立方相加,和当前数字判断:
  12.                 if((个位 * 个位 * 个位 + 十位 * 十位 * 十位 + 百位 * 百位 * 百位) == num){
  13.                         System.out.println("水仙花数:" + num);
  14.                 }

  15. */

  16. class ShuiXianHuaDemo{
  17.         public static void main(String[] args){
  18.         int count = 0;
  19.         for(int sxNum = 100; sxNum <= 999; sxNum++){
  20.                    int  g = sxNum %10;
  21.                int  s = sxNum/10%10;
  22.                int  b = sxNum/100%10;
  23.                          if((g*g*g+s*s*s+b*b*b) == sxNum){
  24.                            System.out.println(sxNum);
  25.                            count++;
  26.                          }
  27.                   }
  28.                 System.out.println("水仙花数有:"+count+"个");
  29.         }
  30. }

  31. /*
  32. 结果是:
  33.         153
  34.                 370
  35.                 371
  36.                 407
  37.                 水仙花数有:4个
  38. */
复制代码
回复 使用道具 举报
感觉理解成数学运算应该比较好弄……
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马