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 ein

    while(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


Anmelden zum Antworten