H
hans5
Gast
hallöchen; ich bräuchte mal eure Hilfe:
Ich hab folgende Aufgabe gestellt bekommen:
Dazu hab ich mal schnell nen programm geschrieben:
Ich weiß, dass das Programm nicht erste Sahne ist und man es effizienter schreiben könnte. Doch mein Problem ist es, dass das Programm nicht alle Zahlen, mit der genannten Eigenschaft findet.
Es findet lediglich die Zahl 145;
Seht ihr den logischen Fehler?
Es muss noch mehr zahlen als die 145 mit der genannten Eigenschaft geben, da 145 als Lösung nicht akzeptiert wird
Bitte helft mir
Ich hab folgende Aufgabe gestellt bekommen:
Man soll also alle Zahlen aufaddieren, deren Summe der Fakultäten der einzelnen Ziffern gleich der Zahl selber ist.145 is a curious number, as 1! + 4! + 5! = 1 + 24 + 120 = 145.
Find the sum of all numbers which are equal to the sum of the factorial of their digits.
Note: as 1! = 1 and 2! = 2 are not sums they are not included.
Dazu hab ich mal schnell nen programm geschrieben:
Code:
public class problem34 {
public static double fakultat(double n){
double p=1;
for(int i=1;i<=n;i++){
p*=i;
}
if(n==0){
p=0;
}
return p;
}
public static void main(String[] args) {
int sum=0;
//Speichert die Summe aller gefunden zahlen, die
//die gesuchte Eigenschaft finden
double[] ziffer=new double[7];
//Speicher alle ziffern, der zu untersuchenden Zahl
double summe;
//Speichert die Summe aller Fakultäten der einzelnen ZIffern
//der zu untersuchenden Zahl
for(double i=3;i<2540161;i++){
//i ist die zu untersuchende Zahl
summe=0;
//Für jedes neue i wird die summe natürlich auf null gesetzt;
//Diese Schleife speichert die ziffern des Zahl i in dem array ziffer
for(int z=0;z<7;z++){
ziffer[z]=((i%Math.pow(10,7-z))-(i%Math.pow(10, 6-z)))/(Math.pow(10, 6-z));
}
/*
* Nicht von Belangen
* for(int k=0;k<7;k++){
* System.out.print(ziffer[k]+" " );
* }
* System.out.println();
*
*/
//diese folgende Forschleife berechnet die
// Summe der Fakultäten der einzelnen Ziffern
for(int z=0;z<7;z++){
summe+=fakultat(ziffer[z]);
//System.out.println(fak(ziffer[z]));
}
//System.out.println(summe);
//Falls die Summe gleich der zu prüfenden Zahl ist
//so wird die sum um die Zahl i erhöht und i wird ausgeben
if(summe==i){
System.out.println(i);
sum+=i;
}
}
//Zum schluss wird natürlich die Lösung ausggeeben
System.out.println(sum);
}
}/*
Wie ich auf die oberste Schranke für i gekommen bin:
Ich hab mir zuerst überlegt, ob eine achtstellige zahl die
genannte Eigenschaft haben kann:
D.h. ich hab die größtmögliche Summe der Fakultäten einer
achtstellige Zahl untersucht:
99999999 => 9!+9!..+9!=8*9!=2903040. Da dies jedoch "nur" eine siebensetllige Zahl ist,
kann keine achtstellige Zahl die gesuchte Eigenschaft besitzen.
also ist die größt mögliche Zahl gegeben durch:
9999999 => 9!+9!..+9!=7*9!=2510160
*/
Es findet lediglich die Zahl 145;
Seht ihr den logischen Fehler?
Es muss noch mehr zahlen als die 145 mit der genannten Eigenschaft geben, da 145 als Lösung nicht akzeptiert wird
Bitte helft mir