ostatnia liczba

0

Jest to zadanie ze SPOJ i nie mam pojęcia jak dokończyć, a muszę wyznaczyć ostatnią cyfrę liczby wyniku z potęgowania. Może wy mnie jakoś nakierujecię bym dał rade rozwiazać to.. ? Wynik np. 27 i ma byc widoczna tylko 7.

#include <iostream>
#include<math.h>
using namespace std;
int main()
{
    int a,b,ile;
    cin>>ile;
    for(int i=1; i<=ile; i++)
    {
            cin>>a>>b;
            cout<<pow(a,b)<<endl;
    }
    return 0;
}
1

modulo z 10. Zawsze da Ci ostatnia liczbe

2

27 % 10 daje 7

Ale od razu ostrzegam, że jak będziesz potęgował "na pałę" i dopiero potem brał ostatnią cyfrę, to nie zaliczysz wszystkich testów. Trzeba pewną rzecz zauważyć odnośnie reszty z dzielenia przez 10.

0

a ten kod który napisałem jest ok? Tylko muszę Modulo zastosować czy bardziej funkcje pow wyrzucić i zamienić czymś innym?

0

A zauważ jak zachowuje się cyfra jedności w potęgach.
Jaką cyfrę jedności ma np. 6n i 46n albo 96n
Jak zachowuje się cyfra jedności np. podczas 71, 72, 73, 74, 75, 76 itd.

1

Ostatnia cyfra iloczynu 235769863*3792577 jest identyczna z ostatnią cyfrą iloczynu 3*7 (mnożymy ostatnie cyfry). Analogiczna reguła jest prawdziwa dla dowolnych liczb.

2
    #include <stdio.h>

    int main() 
      {
       unsigned T,a,b;
       for(scanf("%u",&T);T--;printf("%c\n",(10*(b&3)+(a%10))["0161656161012345678901496569410187456329"])) scanf("%u%u",&a,&b);
       return 0;
      } 
1

Myślę, że przydatna będzie funkcja

int multiply(int n,int m)
{
    return ((n % 10)*(m % 10)) % 10;
}
0

tym razem wykazał mi sędzia "przekroczono limit czasu"

#include <iostream>
using namespace std;
long int potega(int p, int w)
{
    if (w==0) return 1;
    else return p*potega(p,w-1);
}
int main()
{
    int ile,p,w;
    cin>>ile;
    for(int i=1; i<=ile; i++)
    {
        cin>>p>>w;
        cout<<potega(p,w)%10<<endl;
    }
}
0

No a co ci ma wypisać? Nie przeczytałeś ze zrozumieniem żadnego postu w tym temacie chyba. Nadal potęgujesz te liczby, do tego jeszcze rekurencyjnie o_O Nie zrozumiałeś tego co bodans napisał?
123456789123456789 ma taką samą ostatnią cyfrę jak 99. Nie trzeba wykonywać całego takiego mnożenia żeby poznać wynik. Jakbym sie ciebie zapytał jaka jest ostatnia cyfra liczby:
123456789123456789*1234567890 to też byś to najwpierw wszystko wymnożył dokładnie?

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