水仙花数
1.什么是水仙花数
首先让我们来看一看水仙花数字的定义,各个位上的数字与位数次方的和等于这个数字本身也就是:
153=1³+5³+3³
153的各个位数拆出来立方根之和.
2.水仙花数字的实现思维
那么我们该如何实现水仙花数字呢,首先我们就要考虑两个点分别是
1.如何计算这个数字有几位。
多想想其实就能有一些头绪了,取出位数我们就对一个数字除与10根据java的特性int类型不会保留小数部分例如
153/10=15;
15/10=1;
1/10=0;
这样我们发现当一个数字等于0的时候就将这个数字的每一位都除过了这时候我们将这个作为一个循环并且加入计算变量我们就能得到最后的位数了!
public class Test{
public static void main(String[] argc){
int count=0;
int num=153;
while(num!=0){
num/=10;
count++:
}
}
}
2.如何取到每一位的数字。
利用上述代码我们就可以完成一个点,然后我们接着考虑第一个点呢,这时候我们又发现将一个数字取余就可以直接得到这个数字。
153%10=3;
再结合之前的规律。
153/10=15;
15%10=5;
我们将一个数字%10接着/10就可以得到我们需要的了!
public class Test{
public static void main(String[] argc){
int count=0;
int num=153;
while(num!=0){
int tmp = num%10;
num/=10;
count++:
}
}
}
我们再将每个tmp乘与一个count的次方,使用sum进行累加就可以进行判断这个数字是不是水仙数。
3.水仙花数的实现
接下来我们找出1-9999的所有水仙花数字
public class Test {
public static void main(String[] args) {
findWaterFollows();
}
public static void findWaterFollows(){
for(int i=1;i<=9999;i++)
{
int tmp=i;//将i的值赋值给临时变量tmp,此处是防止i的值被改变。
int count=0;//位数存储变量.
int sum=0;//累计变量和
while(tmp!=0){ //tmp!=0表示tmp还有位数没有被计算.
tmp/=10;
count++;//计算位数
}
tmp=i;//重新将i的值赋值给临时变量tmp
while(tmp!=0) {
int x=(int)Math.pow(tmp%10,count);//取出每一位的数字.Math.pow返回值是计算对于第一个参数第二个参数的次方
tmp/=10;//除去这一位.
sum+=x;//将变量进行累加.
}
if(i==sum){
System.out.println(i+"是水仙花数字");
}
}
}
}