【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;
}