需要找出数字因子。没有。很容易被no的所有数字的阶乘的总和整除。 我在HackerRank上尝试这个:https://www.hackerrank.com/contests/projecteuler/challenges/euler034/
我的代码只传递了一个测试用例,即如果n< 20.其他测试用例没有通过。
代码如下。
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int len,newt=0,pos = 0,ans=0;
long fac,sum;
for(int i=10;i<=n;i++){
newt = i;
sum =0;
len = String.valueOf(newt).length();
while(len>0){
fac=1;
pos = newt % 10;
newt = newt/10;
for(int k=1;k<=pos;k++){
fac = fac*k;
}
sum+=fac;
len--;
}
// System.out.print(sum+" "+i);
// System.out.println();
if(sum%i==0){
ans = i;
}
}
System.out.print(ans);
}
}
答案 0 :(得分:0)
用于迭代数字int
的数字的代码似乎过于复杂。这很简单:
n
您的代码也可以通过使用方法将逻辑分成独立的部分来改进,例如
if (n <= 0)
throw new IllegalArgumentException("Not a positive number: " + n);
for (; n > 0; n /= 10) {
int digit = n % 10;
// use digit here
}
这有助于记录代码,现在也可以对3种方法进行单元测试。