C błędny wynik dla 5

0

Napisałem prosty program, wszystko działa oprócz dla podstawy 5, i tutaj moje pytanie, dlaczego, wszystko wygląda dobrze.

#include <stdio.h>
#include <stdlib.h>

int main()
{
int a,p,x,i,n;
scanf("%d",&n);
int tab[n];
for(i=0;i<n;i++)
{
    scanf("%d %d",&a,&p);
    x=pow(a,p);
    printf("%d\n",x);
    tab[i]=x%10;
}
for(i=0;i<n;i++)
{
    printf("%d\n",tab[i]);
}

    return 0;
}
 
1

Użyj ceil(pow(a, b))

0

Mógłbyś mi jeszcze powiedzieć do czego konkretnie służy ta funkcja i kiedy się ją stosuje?

1

Zaaokrąglenie wyniku w górę - pow zwraca liczbę zmiennoprzecinkową, a ty odczułeś tego konsekwencje przy podstawie 5 :)

Zamiast np. 25 otrzymujesz 24.99 z hakiem - jeżeli od razu spróbujesz przypiaać to do liczby całkowitej, to "odetniesz" końcówkę po przecinku i wylądujesz z wynikiem 24.

Czyli to co miałeś w kodzie było równoznaczne z floor(pow(a,b))

0
  1. Zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482
  2. Zapoznaj się z inkrementacją, bo jej nie rozumiesz: http://4programmers.net/Forum/1101404
  3. Nie używaj pow do potęg zmiennoprzecinkowych, lepiej napisz sobie szybkie potęgowanie, ceil() nie załatwi ci wszystkiego , zaraz może się okazać że dla 11 wychodzi 121.000000000000001 więc z ceil() też źle
  4. Odradzam przyzwyczajenia się do int tab[n]; w C++ już to nie zadziała.

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