恒生电子编程题:
超完全数字不变数,例如3位数,153,1^3 + 5^3 + 3^3 =153,这样的数叫水仙花数,4位数例如:1634,1^4 + 6^4 + 3^4 + 4^4 = 1634,这样的数叫四叶玫瑰数,由此规律,此类数称作超完全数字不变数,任意输入一个数字N,求比它小的,并大于10的超完全数字不变数。
测试用例:
输入:
1000
输出:
407
371
370
153
解题代码:
import java.util.Scanner;
public class FlowerNum {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
print(num);
}
static void print(int num){
for (int i = num; i > 10; i--) {
//计算这是一个几位数
int copy_num = i;
int count_num = 0;
while(copy_num >= 1){
copy_num /= 10;
count_num++;
}
//计算每一位上的值x,再count_num次方,求和sum比较
int x = 0;
int sum = 0;
int copy_i = i;
while(copy_i >= 1){
x = copy_i % 10;
sum += (int)Math.pow(x,count_num);
copy_i /= 10;
}
if(sum == i){
System.out.println(i);
}
}
}
}
解题思路:从N开始循环减,到N>10,循环遍历数为 i ,
①先求出 i 是一个几位数,设为n。
②求出当前 i 的每一位,并求它的n次方。
③将每一位的n次方加起来,得到sum
④使用 sum 和 i 比较,若相等,则 i 为超完全数字不变数。
需要注意的是,不能一开始就求N是几位数,必须求当前数是几位数。