Project Euler#34:数字阶乘 - 评论代码:Java

时间:2016-01-07 17:24:13

标签: java

需要找出数字因子。没有。很容易被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);
        }
}

1 个答案:

答案 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种方法进行单元测试。