frage zum double in bedingungen
-
ich hab ein kleines prog geschrieben, mit dem man die Fakultät berechnen kann (sollte)... aber ich wollte den anzeigebereich erhöhen auf double und nicht nur int, da man sonst nur die Fakultät von bis zu etwa 13 erstellen kann... :
#include <stdio.h>
double zahl=0;
double zahl_a=0;
double f=1;int main(){
printf("Ddieses Programm dient dazu um die Fakulteat einer zahl zu berechnen\n\n");
printf("Bitte geben Sie eine Zahl ein: ");
scanf("%f", &zahl);
zahl_a=zahl;
while(zahl>1) { //
f=f*zahl;
printf("zahl:%f", zahl);
printf("f:%f", f);
zahl=zahl-1;
printf("zahl:%f", zahl);
}printf("Die Fakultaet von %f ist: %f\n", zahl_a, f);
system("PAUSE");
return (0);
}von der art her möchte ich es lassen, aber das problem liegt in der while-klammer... dh ich weiss net was ich reinshcreiben soll...
-
Hallo,
ich verstehe nicht ganz warum du double als Datentyp verwendest. Soweit ich weiß kann man nur von natürlichen Zahlen eine Fakultät berechnen.
Du hast da auch etwas verwechselt. Den Anzeigenbereich von int erhöhst du nicht mit double, nimm dafür long long oder so.Und warum sind die Variablen global?
#include <stdio.h> int main(void) { int zahl; int fak = 1; int i; scanf("%d", &zahl); for(i = zahl; i > 1; i--) { fak *= i; } printf("Die Fak. von %d betraegt: %d\n", zahl, fak); return 0; }
-
für die dummies (ich imbegriffen) ;): was ist die "abkürzung" für long long? normal d also %d oder eine andere?
ich werds sonst einfach mal mit d testen
-
Also ich hätte jetzt "lld" gesagt:
#include <stdio.h> int main(void) { unsigned long long int zahl; unsigned long long int fak = 1; unsigned long long int i; scanf("%lld", &zahl); for(i = zahl; i > 1; i--) { fak *= i; } printf("Die Fak. von %lld betraegt: %lld\n", zahl, fak); return 0; }
-
#include <stdio.h> long long int zahl=0; long long int zahl_a=0; long long int f=1; int main(){ printf("Ddieses Programm dient dazu um die Fakulteat einer zahl zu berechnen\n\n"); printf("Bitte geben Sie eine Zahl ein: "); scanf("%ld", &zahl); zahl_a=zahl; while(zahl>1) { f=f*zahl; printf("zahl:%ld\n", zahl); printf("f:%ld\n", f); zahl=zahl-1; printf("zahl:%ld\n", zahl); } printf("Die Fakultaet von %ld ist: %ld\n", zahl_a, f); system("PAUSE"); return (0); }
also mit lld gehts (hier mit ld, geht aber trotzdem) aber am schluss zeigt es nur null aus?!?
-
Bei unsigned long long aber bitte %llu.
Für das eigentliche Problem (zu kleiner Wertebereich) wäre wohl die GMP eine Idee.
-
zeigt immer noch das gleiche an: Ddieses Programm dient dazu um die Fakulteat einer zahl zu berechnen
Bitte geben Sie eine Zahl ein: 10
zahl:10
f:10
zahl:9
zahl:9
f:90
zahl:8
zahl:8
f:720
zahl:7
zahl:7
f:5040
zahl:6
zahl:6
f:30240
zahl:5
zahl:5
f:151200
zahl:4
zahl:4
f:604800
zahl:3
zahl:3
f:1814400
zahl:2
zahl:2
f:3628800
zahl:1
Die Fakultaet von 10 ist: 0
Drücken Sie eine beliebige Taste . . .also es sollte theorethisch gehen aber es zeigts einfach am schluss nicht an
-
TactX schrieb:
Bei unsigned long long aber bitte %llu.
Für das eigentliche Problem (zu kleiner Wertebereich) wäre wohl die GMP eine Idee.oder wenn nicht die letzten stellen wichtig sind, sondern nur die ersten, dann
einfach die logarithmen addieren und nachher bla mal 10 hoch blubb anzeigen.
lustigerweise ist schneller und einfacher, wenn man in die schleife einwhile(f>=10) f/=10, e+=1;
einbaut und am ende f mal 10 hoch e anzeigt.
-
sandmaster schrieb:
zeigt immer noch das gleiche an: Ddieses Programm dient dazu um die Fakulteat einer zahl zu berechnen
<snipp>
also es sollte theorethisch gehen aber es zeigts einfach am schluss nicht an
Ich schrieb
Bei unsigned long long aber bitte %llu.
Du bist bei long long int bei %ld, was falsch ist. %lld ist richtig.
-
hmpf geht immer noch net... es zeigt immer noch 0 an:
#include <stdio.h> long long int zahl=0, zahl_a=0, f=1; int main(){ printf("Ddieses Programm dient dazu um die Fakulteat einer zahl zu berechnen\n\n"); printf("Bitte geben Sie eine Zahl ein: "); scanf("%d", &zahl); zahl_a=zahl; while(zahl>1) { f=f*zahl; printf("zahl:%d\n", zahl); printf("f:%lld\n", f); zahl=zahl-1; printf("zahl:%lld\n", zahl); } printf("Die Fakultaet von %lld ist: %lld\n", zahl_a, f); system("PAUSE"); return (0); }
-
1. sind deine Formatbezeichner bei scanf()/printf() immer noch nicht einheitlich.
2. du gibst aber nicht zufällig zu hohe Zahlen an? Bei long long int kannst du nämlich (höchstwahrscheinlich) höchsten 20! berechnen.
-
also bei int ist es etwa 14... aber ich möcht ev doch ei wenig höher... aber ich weiss net wieso es nicht geht