Silnia Jezyk c

0

Co mam zrobic zeby np dla n=100 nie dawalo mi 0. Jestem nowy w programowaniu.


#include <stdio.h>
int main()
{
    long long int n, i;
    long long int silnia = 1;
    printf("Podaj z jakiej liczby chcesz obliczyc silnie\n");
    scanf("%lld",&n);
    if (n < 0)
        printf("Nie ma silni z liczby ujemnej\n");
    else
    {
        for(i=1; i<=n; ++i)
        {
            silnia *= i;
        }
        printf("Silnia z %lld = %lld\n", n, silnia);
    }
    return 0;
}
4

100! składa się ze 158 cyfr w zapisie dziesiętnym - to daleko poza standardowymi możliwościami obliczeniowymi.

Szukaj informacji pod kątem c big numbers.

1

Użyj biblioteki do big intów. Nie jestem pewien, ale dla 100 chyba double jeszcze może dać precyzyjny wynik.

Jednak się nie da.
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 / 297 = 588971222367687651371627846346807888288472382883312574253249804256440585603406374176100610302040933304083276457607746124267578125
liczba czynników pierwszych równych 2 dla liczb [2,100] to 97, więc mantysę można przesunąć max o 97 bitów bez straty precyzji. Jednocześnie pozostaje liczba 128-bitowa, więc za duża dla double'a.

2

Znaleźć typ który pomieści taką wielką liczbę. Zobacz sobie zakresy zmiennych.
100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

0

Bardzo dziekuje za pomoc :)

0

Przekraczasz zakres dla long long int, tak gdzieś przy silnia z 24.

1 użytkowników online, w tym zalogowanych: 0, gości: 1