【LEETCODE】【史密斯数】
题目描述
Simth数的概念:一个非素数,其各位之和等于其所有质因数的各位之和。例如:
4=2 2,4=2+2,所以4是一个史密斯数。
22=211,2+2=2+1+1,22也是一个史密斯数。
27=3 33,2+7=3+3+3,27也是一个史密斯数。
解答要求
时间限制:1000ms, 内存限制:100MB
输入
第一行输入一个整数n(1<n<200),表示有n组测试数据。
接下来每行一个数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;}