0
点赞
收藏
分享

微信扫一扫

统计随机区间数中的水仙花数的个数

蒸熟的土豆 2022-02-22 阅读 50

标题:水仙花数

水仙花数是指一个 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();
    }
}

以上

举报

相关推荐

水仙花数的写法

水仙花数(java)

打印水仙花数

JAVA——水仙花数

c水仙花数

0 条评论