/*---循环练习---*/
//练习1. 获取一个3位数
// 的百位 十位 个位 上的数字
// int num = 456;
/*
num/100
num%100/10
num%10
*/
//练习2. 获取一个给定的任意正整数 n位
// 的各个 位上的数字
//问题3. 求一个整数 10 的多少次方
// 3^5 = 3*3*3*3*3
// 2^-1.5
//幂运算
// System.out.println(Math.pow(2, 0.5));
/*
1 num2%10^n /10^(n-1)
2 num2%10^(n-1) /10^(n-2)
3 num2%10^(n-2) /10^(n-3)
4 num2%10^(n-3) /10^(n-4)
...
n num2%10^(n-(n-1)) /10^(n-n)
通项式: num2%10^(n-(i-1)) /10^(n-i)
*/
// int num2 = 789612;
// int n=6;
//
// //i=1 表示最高为 依次向右
// for(int i=1;i<=n;i++){
// //求 pow 10^(n-i)
// int pow = 1;
// for(int j=1;j<=n-i;j++){
// pow*=10;
// }
//
// int result = num2%(pow*10) /pow;
// System.out.println(result);
// }
//练习:判定一个数是否是 水仙花数
// abc = a^3+b^3+c^3
// 123 =? 1^3 2^3 3^3
// tmp=0
// 获取n的每一位
// tmp += 每一位的3次方
// tmp ==? n
// int num = 123;
// int n = 3;
// int tmp = 0;
// //从最高位到最低位遍历 num
// for(int i=1;i<=n;i++){
// //取出当前位的值 v - num%10^(n-(i-1)) /10^(n-i)
// int pow = (int) Math.pow(10, n-i);
// int v = num%(pow*10) / pow;
//
// //求v的三次方
// //tmp += v^3
// tmp += v*v*v;
// }
//
// //判定 tmp 是否等于 num
// if(tmp == num){
// System.out.println("是水仙花数");
// }
//练习 :找出所有的水仙花数
// 最大/最小
for(int k=999; k>=100;k--){
//判定k是否是水仙花数
int n = 3;
int tmp = 0;
//从最高位到最低位遍历 num
// for(int i=1;i<=n;i++){
// //取出当前位的值 v - num%10^(n-(i-1)) /10^(n-i)
// int pow = (int) Math.pow(10, n-i);
// int v = k%(pow*10) / pow;
//
// //求v的三次方
// //tmp += v^3
// tmp += v*v*v;
// }
//==简单方法 ==直接求3位数的各个位的值
int a = k/100;
int b = k/100%10;
int c = k%10;
tmp = a*a*a + b*b*b + c*c*c;
//判定 tmp 是否等于 num
if(tmp == k){
System.out.print(k+" ");
break;
}
}
}
}
//练习1. 获取一个3位数
// 的百位 十位 个位 上的数字
// int num = 456;
/*
num/100
num%100/10
num%10
*/
//练习2. 获取一个给定的任意正整数 n位
// 的各个 位上的数字
//问题3. 求一个整数 10 的多少次方
// 3^5 = 3*3*3*3*3
// 2^-1.5
//幂运算
// System.out.println(Math.pow(2, 0.5));
/*
1 num2%10^n /10^(n-1)
2 num2%10^(n-1) /10^(n-2)
3 num2%10^(n-2) /10^(n-3)
4 num2%10^(n-3) /10^(n-4)
...
n num2%10^(n-(n-1)) /10^(n-n)
通项式: num2%10^(n-(i-1)) /10^(n-i)
*/
// int num2 = 789612;
// int n=6;
//
// //i=1 表示最高为 依次向右
// for(int i=1;i<=n;i++){
// //求 pow 10^(n-i)
// int pow = 1;
// for(int j=1;j<=n-i;j++){
// pow*=10;
// }
//
// int result = num2%(pow*10) /pow;
// System.out.println(result);
// }
//练习:判定一个数是否是 水仙花数
// abc = a^3+b^3+c^3
// 123 =? 1^3 2^3 3^3
// tmp=0
// 获取n的每一位
// tmp += 每一位的3次方
// tmp ==? n
// int num = 123;
// int n = 3;
// int tmp = 0;
// //从最高位到最低位遍历 num
// for(int i=1;i<=n;i++){
// //取出当前位的值 v - num%10^(n-(i-1)) /10^(n-i)
// int pow = (int) Math.pow(10, n-i);
// int v = num%(pow*10) / pow;
//
// //求v的三次方
// //tmp += v^3
// tmp += v*v*v;
// }
//
// //判定 tmp 是否等于 num
// if(tmp == num){
// System.out.println("是水仙花数");
// }
//练习 :找出所有的水仙花数
// 最大/最小
for(int k=999; k>=100;k--){
//判定k是否是水仙花数
int n = 3;
int tmp = 0;
//从最高位到最低位遍历 num
// for(int i=1;i<=n;i++){
// //取出当前位的值 v - num%10^(n-(i-1)) /10^(n-i)
// int pow = (int) Math.pow(10, n-i);
// int v = k%(pow*10) / pow;
//
// //求v的三次方
// //tmp += v^3
// tmp += v*v*v;
// }
//==简单方法 ==直接求3位数的各个位的值
int a = k/100;
int b = k/100%10;
int c = k%10;
tmp = a*a*a + b*b*b + c*c*c;
//判定 tmp 是否等于 num
if(tmp == k){
System.out.print(k+" ");
break;
}
}
}
}