Sorry friend, don't know why but I can't find any result..
https://www.spoj.pl/forum/search.php?keywords=CRYPT049
please see
Nie wiem co dokładnie pokazuje "menedżer zadań" w Windows i co dokładnie sprawdzasz, ale prosta analiza kodu wskazuje, że nie może to być pamięć alokowana przez proces.
windows.microsoft.com/pl-pl/wind ... =windows-7
Ja pod Linuxem sprawdzam zużycie pamięci używając valgrind-a
==29479== Memcheck, a memory error detector
==29479== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==29479== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==29479== Command: ./a.out
==29479==
1
1000000000 1000000000
==29479== Warning: set address range perms: large range [0x395a5040, 0x127c57840) (undefined)
0
==29479== Warning: set address range perms: large range [0x395a5030, 0x127c57850) (noaccess)
==29479==
==29479== HEAP SUMMARY:
==29479== in use at exit: 24 bytes in 5 blocks
==29479== total heap usage: 7 allocs, 2 frees, 4,000,000,032 bytes allocated
==29479==
Tak jak się można spodziewać dla wejścia z b=10^9 Twój program alokuje ~4GB pamięci i stąd na spoj-u przekracza limit.
Proponuje zapoznaj się z narzędziami, które pokazują zużycie/alokacje pamięci pod Windows. Znalazłem taki wątek:
stackoverflow.com/questions/4134 ... or-windows2
Poddaję się. To już kolejny wariant który testuje. Szybciej i krócej nie potrafie. Spoj wskazuję błąd.
[bbone=CPP,2663]
include
include
using namespace std;
int ostatnia(int liczba)
{
int wynik=0;
wynik = liczba % 10; // pobiera cyfrę
liczba = liczba / 10; // obcina liczbę o wybraną cyfrę
return(wynik);
}
int main()
{
int ile,b;
int liczba,potega;
double wynik;
cin>>ile;
for(int i=0;i<ile;i++)
{
cin>>liczba>>potega;
b=ostatnia(liczba);
wynik=pow(b,potega);
cout<<ostatnia(wynik)<<endl;
}
return 0;
}
[/bbone]
To nie łatwiej tak:
cin >> liczba;
b = liczba % 10;
względnie tak:
int ostatnia(int liczba)
{
return liczba % 10;
}
Jeśli wprowadzasz jakąś funkcję pomocniczą, to dobrze, żeby rzeczywiście pomagała - czy to wydajnościowo, czy jeśli chodzi o czytelność kodu. W tym przypadku w ogóle się to nie opłaca, bo dochodzi koszt wywołania, ponadto czytający musi skakać po kodzie, żeby zobaczyć, co robi Twoja dodatkowa funkcja.
Dokładnie tak.
Możesz nawet pójść jeszcze jeden albo dwa, trzy kroki dalej:
[bbone=cpp,2260] wynik = pow(liczba % 10, potega);
cout << ostatnia(wynik) << endl;[/bbone]
lub drugi krok:[bbone=cpp,2261] wynik = pow(liczba % 10, potega);
cout << wynik % 10 << endl;[/bbone]
trzeci:
[bbone=cpp,2262]cout << pow(liczba % 10, potega) % 10 << endl;[/bbone]
ale dla zakresu danych z zadania i tak pow się wysypie.
Musisz jeszcze w jakiś sposób "skrócić" wykładnik [potęgę], lub poczytać o szybkim potęgowaniu i możesz na jego bazie [algorytmie] rozwiązać to zadanie..
[tex]30^{30} = 205891132094649000000000000000000000000000000[/tex]
[tex]unsigned\; long\;long < 2^{64} = 18446744073709551616[/tex]
[tex]1\;000\;000\;000^{1\;000\;000\;000} = .............000\;000..........?????[/tex]
Tak, że nie, źle nie napisałeś, ale warto też czytać, także to co trochę wyżej już zostało napisane i warto też zaglądnąć do regulaminu - są tam też podpowiedzi, a nie od razu wrzucać pytanie.