2013-07-26 2 views
0

J'essaie de répondre au problème numéro 53 du projet Euler. Je prends une approche de force plutôt brute, mais il me semble que ma logique devrait trouver la bonne réponse, même si cela prend un certain temps. qu'est-ce que je fais de mal dans cette situation en plus d'être plutôt inefficace, c'est-à-dire que le compilateur revient avec une division ArithmeticException par zéro.ArithmeticException divide par zéro

import java.util.*; 

public class problem53 
{ 
    public static int fact(int x) 
    { 
    int total = 0; 
    if(x != 0) 
    { 
     for(int i=(x-1);i>0;i--) 
     { 
     x = x*i; 
     total = x; 
     } 
    } 
    if(x==0) 
     total = 1; 
    return total; 
    } 

    public static int combo(int y,int z) 
    { 
     int end = 0; 
     if(y==0) 
     y=2; 
     if(z==0) 
     z=1; 
     if(y-z != 0) 
     { 
     end = fact(y)/(fact(z)*(fact(y-z))); 
     } 
     return end; 
} 

public static void main(String[]args) 
{ 
    int answer = 0; 
    List<Integer> sure = new ArrayList<Integer>(); 
    for(int i=20;i<=100;i++) 
    { 
    for(int j=2;j<i;j++) 
    { 
     int ferNow = combo(i,j); 
     if(ferNow>=1000000) 
     sure.add(ferNow); 
    } 
    } 
    answer = sure.size(); 
    System.out.println(answer); 
    } 
} 

Merci pour l'aide à l'avance.

+3

Votre 'fait()' est cassé. Il retournera '0' pour' fact (1) '. –

Répondre

0

si z = 1 ou y-z = 1 vous recevrez une erreur cette

Parce que fait (1) return 0

+0

D'accord, mais pourquoi? Quelle partie de la méthode fait t retourner 0? J'ai ajouté beaucoup de choses là-dedans, inutile de le dire, et si je peux obtenir cette méthode pour ne pas retourner 0 pour 1 alors je peux le nettoyer considérablement. – Thak360

+1

Tracez votre code fact() à la main lorsque x == 1. – rossum