练习_(4)求1000以内的水仙花数,及扩展思路。
//判断是否是水仙花数
//水仙花数是指一个 n 位数(n≥3 ),
//它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
//获取1000以内的水仙花数
思路:1000以内的数是都三位数,只要控制循环到1000然后风别获取到这个数的个位十位百位乘以三次幂再相加判断是否等于这个数。
代码如下:
/* * 获取1000以内的水仙花数 */ public class isNarcissus { public static void main(String[] args) { // TODO Auto-generated method stub for(int i=100;i<1000;i++){ int a = i%10;//个位数 int b = i/10%10;//十位数 int c = i/100%10;//百位数 if ( (a*a*a + b*b*b + c*c*c)==i ) { System.out.print(i+" "); } } } }
结果:
1000以内的水仙花数我们求出来了,那么如果要求10000以内,100000以内的水仙花数怎么求,封装一个类,
//计算自幂数 public class Narcissuses { private int value; public int getValue() { return value; } public void setValue(int value) { this.value = value; } public boolean isNarcissuser(){ int count=(value+"").length();//保存位数 int vae=value;//备份 int sum=0;//保存结果; int a=0;//保存个位 while(value>0){ int b=1; //保存每位数幂次发后结果 a=value%10;//得到个位 for(int i=0;i<count;i++){ b*=a;//计算幂数 } sum+=b;//结果相加 value/=10;//循环结束,准备下一位数的幂数获取 } //判断结果是否等于本身。 if(sum==vae){ return true; } return false; } }
调用这个类
1 public class NarcissuseMain { 2 3 public static void main(String[] args) { 4 // TODO Auto-generated method stub 5 Narcissuses ns=new Narcissuses(); 6 //求1000以内的自幂数 7 for (int i = 100; i < 999; i++) { 8 ns.setValue(i); 9 if(ns.isNarcissuser()){ 10 System.out.print(i+" "); 11 12 } 13 } 14 15 } 16 }
结果: