欧拉项目数字因子的总和

时间:2010-07-04 13:35:07

标签: java algorithm

这里是关于数字因子的总和的问题

http://projecteuler.net/index.php?section=problems&id=254

这里也是Define sf(n) as the sum of the digits of f(n). So sf(342) = 3 + 2 = 5.

这是代码,它打印32作为数字的阶乘的总和,但它没有显示第二个结果

import java.util.*;
public class fact_of_digit1 {
public static int fact(int a){
    if (a==0)  return 1;
     return a*fact(a-1);
}
   public static int factorialofdigit(int a){
       int sum=0;
       int t=0;
       while (a!=0){
           t= a%10;
            a/=10;
            sum+=fact(t);
       }
       return sum;

   }
    public static void main(String[] args) {
       Scanner scnr=new Scanner (System.in);
       System.out.println("enter a:");
       int a=scnr.nextInt();
     System.out.println(factorialofdigit(a));
     System.out.println(sfn(a));
    }
    public static int sfn(int a){
        int sum1=0;
        int t=factorialofdigit(a);
         while (t!=0){
             sum1+=t%10;
             t/=10;



         }
         return sum1;
    }

}

结果是:

enter a:
342
32
BUILD SUCCESSFUL (total time: 3 seconds)

4 个答案:

答案 0 :(得分:1)

代码看起来很好,并在这里工作,所以它可能与IDE或你如何使用它有关。

您是否正在运行调试模式?你有没有设置断点?

如果您创建一个新项目并将代码复制到该项目会发生什么?

以下程序是否有效?

import java.util.*;
public class fact_of_digit1 {
    public static void main(String[] args) {
        Scanner scnr=new Scanner (System.in);
        System.out.println("enter a:");
        int a=scnr.nextInt();
        System.out.println(5);
        System.out.println(3);
    }
}

用“int a = 342”替换扫描仪。

最后添加一个额外的println语句。

答案 1 :(得分:0)

main函数有两个不在循环中的print语句。你只会打印出这两个数字。

答案 2 :(得分:0)

看看这一行,我们需要计算sg(i)的总和

if (condition) {
  // statement1
} else {
  // statement2
}

答案 3 :(得分:0)

def f(n):
    from math import factorial
    lst_n = list(map(int, str(n).strip()))
    s=0
    for i in lst_n:
        s += factorial(i)
    return s
def sf(n):
    return sum(list(map(int, str(f(n)))))

def g(i):
    for n in range(1, 100000000):
        if sf(n)==i:
            break
    return n
def sg(n):
    s= 0
    for i in range(1, n+1):
        s += sum(list(map(int, str(g(i)))))
    return s
N= int(input())
LST=[]
for i in range(N):
    LST.append(list(map(int, input().strip().split())))
for i in range(N):
    print(sg(LST[i][0]))
相关问题