package mr.y.arithmetic;
/**
* 题目:打印出所有的”水仙花数”,所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
* 例如: 153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
*
* 分析: 题目说了水仙花数是一个三位数 那么我们查找的范围就已经确定到了 100~999之间
* 现在的任务 就是我们要怎样获取 每一位的数值 ?
* 一般情况下 假设我们要取 num 的个位上的数字 , 最直接的做法就是num%10 对其取余
* 例如 123%10 = 3 321%10 = 1 等等
* ok 这样就解决了 个位数字 取值的问题, 但是问题又来了, 我 们怎么获取十位上的数字?
* 是不是可以用100对 num进行取余呢? 我们试一下
* 假设 num = 361, 那么 361%100 = 61 看来好像不是这样, 我们需要变换一下思路。
* 我们可不可以把 十位 变成 个位 呢?如果能把 十位 数字 变成 个位数字 那么按照上面的方法
* 我们就可以获取 到 十位 上的数字了
* 想一想 有没有什么 运算可以做到呢, 想来想去也就只有 除法(/)可以做到了
* num%10 = 个位
* num/10%10 = 十位
* num/10/10%10 = 百位
*
*/
public class TestDaffodilNumber {
public static void main(String[] args) {
for(int num=100; num<1000; num++){
boolean bool = getDaffodilNumber(num);
if(bool == true){
System.out.print(num+"\t");
}
}
}
public static boolean getDaffodilNumber(int num){
int sum = 0 ;
int temp = num;
int length = String.valueOf(num).length();
if(num<100 || num>999){
return false;
}
for(int i=0; i<length; i++){
int num1 = temp%10;
temp = temp/10;
sum = sum + num1*num1*num1;
}
if(sum == num){
return true;
}
return false;
}
}
/**
* 程序结束, 当然啦 也可以不用这么麻烦 你完全可以 把 每个位获取到 就好像 下面这样
* num%10 = 个位
* num/10%10 = 十位
* num/10/10%10 = 百位
* int sum = 个位个位个位 + 十位十位十位 + 百位百位百位
* if(sum == num){
* ….
* }
*
* 虽然这样简单粗暴, 但是我不喜欢 因为不够灵活 所以我直接pass了 。
* 最后还是 希望大神 给予指正, 非常感谢。
* 时间:2017年1月10日11:47:38
*/