【LEETCODE】【史密斯数】

【LEETCODE】【史密斯数】


题目描述
Simth数的概念:一个非素数,其各位之和等于其所有质因数的各位之和。例如:
4=2 2,4=2+2,所以4是一个史密斯数。
22=2
11,2+2=2+1+1,22也是一个史密斯数。
27=3 33,2+7=3+3+3,27也是一个史密斯数。

解答要求
时间限制:1000ms, 内存限制:100MB
输入
第一行输入一个整数n(1 接下来每行一个数num(1<=num<=5000000)。

输出
对于输入的每一个num,输出大于等于num的最小的史密斯数。

样例
输入样例 1 复制

3
3
4
4937774
输出样例 1

4
4
4937775
提示样例 1

提示
从给出的数开始递增,暴力判断就行。

public static void main(String[] args) {
        // please define the JAVA input here. For example: Scanner s = new Scanner(System.in);
        Scanner s = new Scanner(System.in);
        long n=s.nextLong();
        for(long i=0;i<n;i++){
            long num=s.nextLong();
            while(true){
                if(isSimthDigit(num)){
                    System.out.println(num);
                    break;
                }
                num++;
            }
        }
        // please finish the function body here.
        // please define the JAVA output here. For example: System.out.println(s.nextInt());
    }

    public static boolean isSimthDigit(long num){
        long sumRight=0;
        long sumLeft=0;
        long temp=num;
        if(isPrime(num)){
            return false;
        }
        //分解质因数
        for(long i=2;i<=temp;i++){
            if (temp%i==0){
                if(i<10){
                    sumRight+=i;
                }else
                {
                    sumRight+=getSum(i);
                }
                temp/=i;
                i=1;
            }
        }
        sumLeft=getSum(num);
        if(sumLeft==sumRight){
            return true;
        }
        return false;
    }
    public static boolean isPrime(long num) {
        for (long i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }
    public static long getSum(long num){
        long sum=0;
        while(num>=10){
            sum+=num%10;
            num/=10;
        }
        return sum+num;
    }

你可能感兴趣的:(算法,java,leetcode)