标题:水仙花数
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153);给你A和B,求[A,B]区间内有多少个水仙花数
输入描述:
两个正整数,用空格隔开,保证数字都小于等于1000000,否则返回0
输出描述:
一个数字,表示[A,B]区间内的水仙花数个数
示例
输入
100 1000
输出
4
/**
* @Classname demo001
* @Author zk
* @Description
* @Version 1.0.0
* @Date 2022/2/22 21:37
* @Package com.xxx
*/
public class Demo001 {
public static void main(String[] args) {
/**
* 标题:水仙花数 | 时间限制:1秒 | 内存限制:32768K
* 水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153);给你A和B,求[A,B]区间内有多少个水仙花数
* 输入描述:
* 两个正整数,用空格隔开,保证数字都小于等于1000000,否则返回0
* 输出描述:
* 一个数字,表示[A,B]区间内的水仙花数个数
* 示例1
* 输入
* 100 1000
* 输出
* 4
*/
// 两个正整数,用空格隔开
Scanner scanner = new Scanner(System.in);
String strAB = scanner.nextLine();
String[] arr = strAB.split(" ");
int intA = Integer.parseInt(arr[0]);
int intB = Integer.parseInt(arr[1]);
if (intA > 1000000 || intB > 1000000) {
System.out.println("0");
}
// 排除一位数和二位数对统计的影响
if (intA < 100) {
intA = 100;
}
if (intB < 100) {
intB = 100;
}
// 判断 A B 两数字的大小
int num;
if (intA > intB) {
num = getNum(intA, intB);
} else if (intB > intA) {
num = getNum(intB, intA);
} else {
int temp = intA;
int sum = 0;
for (int j = 0; j < getLength(intA); j++) {
sum += Math.pow(temp % 10, getLength(intA));
temp = temp / 10;
}
if (sum == intA) {
num = 1;
} else {
num = 0;
}
}
System.out.println(num);
}
private static int getNum(int num1, int num2) {
int count = 0;
for (int i = num2; i <= num1; i++) {
// 1000000
// Math.pow(param1,param2):返回第一个参数的第二个参数的次方;
int temp = i;
int sum = 0;
for (int j = 0; j < getLength(i); j++) {
sum += Math.pow(temp % 10, getLength(i));
temp = temp / 10;
}
if (sum == i) {
count++;
}
}
return count;
}
/**
* 判断一个数有多少位
* @param num2
* @return
*/
private static int getLength(int num2) {
String str = String.valueOf(num2);
// int i = 0;
// while (num2 / 10 > 0) {
// i++;
// num2 /= 10;
// }
return str.length();
}
}
以上