首页 > 欢聚时代(yy) Java笔试
头像
枯藤玉树
编辑于 2020-09-01 10:47
+ 关注

欢聚时代(yy) Java笔试

选择题

20道,80分,错选不得分,少选得1/2分。(这1/2的意思是得一半的分还是得0.5分?)

编程

求下一个水仙花数

水仙花数
但是题目里并没有限定说是三位数。说了一句 1 位数都是水仙花数,因为 3^1 = 3,153是水仙花数,因为153=1^3 + 5^3 + 3^3。
问输入一个数,比这个数更大一点的水仙花数是多少。

输入:108
输出:153

public class Main {

    public static void main(String[] args) {
        int n = 1000;
        String[] split = (n + "").split("");
        int length = split.length;
        narcissisticNumber(length).forEach(System.out::println);
    }


    /**
     * 比 n 更大的水仙花数
     * @param n
     * @return
     */
    public long nextNarcissisticNumber(int n) {
        // write code here
        if (n < 9) return n + 1;
        if (n >= 10 && n < 100) return 153;
        String[] digits = ("" + n).split("");
        List<Long> longs = narcissisticNumber(digits.length);
        for (Long l : longs)
            if (l > n)
                return l;
        return -1;
    }

    /**
     * 求出 n 位数的所有水仙花数
     *
     * @param n
     * @return
     */
    private static List<Long> narcissisticNumber(int n) {
        List<Long> list = new ArrayList<>();
        for (long i = (long) Math.pow(10, n - 1); i <= Math.pow(10, n) - 1; i++) {
            long sum = 0;
            long tmp = i;
            while (sum <= i && tmp != 0) {
                long every = 1;
                long mod = tmp % 10;
                for (long j = 1; j <= n; j++)
                    every *= mod;
                sum += every;
                tmp /= 10;
            }
            if (sum == i)
                list.add(sum);
        }
        return list;
    }
}

简答题

数据库三张表,两道SQL题。分值4、6。

全部评论

(1) 回帖
加载中...
话题 回帖

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐