> #include <iostream>
>
> using namespace std;
>
> int main()
>
> {
> int ile;
>
> cin >> ile;
>
> int *tab1 = new int[ile];
> int *tab2 = new int[ile];
>
> for (int i = 1; i <= ile; i++)
> {
> cin >> tab1[i] >> tab2[i];
>
> }
>
> for (int i = 1; i <= ile; i++)
> {
> if (tab2[i] == 0) cout << 1;
> else
> {
> switch (tab1[i]%10)
> {
> case 0: cout << 0<<endl; break;
> case 1: cout << tab1[i]%10 << endl; break;
> case 2:
> switch (tab2[i]%4)
> {
> case 0: cout << 6 << endl; break;
> case 1: cout << 2 << endl; break;
> case 2: cout << 4 << endl; break;
> case 3: cout << 8 << endl; break;
> } break;
> case 3:
> switch (tab2[i] % 4)
> {
> case 0: cout << 1 << endl; break;
> case 1: cout << 3 << endl; break;
> case 2: cout << 9 << endl; break;
> case 3: cout << 7 << endl; break;
> } break;
> case 4:
> switch (tab2[i] % 2)
> {
> case 0: cout << 6 << endl; break;
> case 1: cout << 4 << endl; break;
> } break;
> case 5: cout << 5 << endl; break;
> case 6: cout << 6 << endl; break;
> case 7:
> switch (tab2[i] % 4)
> {
> case 0: cout << 1 << endl; break;
> case 1: cout << 7 << endl; break;
> case 2: cout << 9 << endl; break;
> case 3: cout << 3 << endl; break;
> } break;
> case 8:
> switch (tab2[i] % 4)
> {
> case 0: cout << 6 << endl; break;
> case 1: cout << 8 << endl; break;
> case 2: cout << 4 << endl; break;
> case 3: cout << 2 << endl; break;
> } break;
> case 9:
> switch (tab2[i] % 2)
> {
> case 0: cout << 1 << endl; break;
> case 1: cout << 9 << endl; break;
> } break;
>
> }
>
>
> }
>
>
>
> }
>
> system("pause");
> return 0;
Mam taki kod, wiem że długaśny, jednak liczy bez wielkich obliczeń i szybko, jednak SPOJ go nie przepuszcza. Gdzie jest błąd?
Witam.
Od 2 dni walczę z tym banalnym programem i niestety poległem. Czy mógłbym liczyć na jakąś podpowiedź?
Poniżej kod:
int main()
{
int a,b,D;
unsigned long long wynik;
do
{
cin>>D;
}
while (D<1 || D>10);
for (int k=0 ; k<D ; k++)
{
cin>>a;
cin>>b;
if (b==0)
{
wynik=1;
}
else if ((a%10==0) || (a%10==1) || (a%10==5) || (a%10==6))
{
wynik=a;
}
else
{
wynik=1;
for (int i=0 ; i<b ; i++)
{
wynik*=a;
}
}
cout<<wynik%10<<endl;
}
return 0;
}
SPOJ wywala błąd związany z limitem czasowym.
Każda podpowiedź będzie na wagę złota.
Z góry dziękuję.
Myślę, że @mariusz193 ma rację. W szczególności posty jasno sugerują, że masz mieć O(1).
Witam,
Napisalem taki oto kod:
#include
#include
using namespace std;
int main()
{
int n;
long long int x;
cin>>n;
int *l = new int[n];
int *w = new int[n];
for(int i=0;i<n;i++)
cin>>l[i]>>w[i];
for(int i=0;i<n;i++){;
x=pow(l[i],w[i]);
cout<<"x: "<<x<<endl;
cout<<x%10<<endl;
}
return 0;
}
Mogby mi ktos powiedziec dlaczego po wpisaniu danych 1 33 4 moj x wynosi 1185920 a nie 1185921?
SPOJ zaakceptował mi rozwiązanie tego problemu, a tymczasem wiem, że mój kod daje błędny rezultat w Code::Blocks dla niektórych potęg liczb kończących się na 5 (np.: dla 5^2, 5^3, 5^5 daje ostatnią liczbę 4, a dla 5^1 daje 5). Z czego niepoprawny wynik podawany przez codeblocks może wynikać? Kod wydaje się dobry i dla wszystkich innych przypadków daje dobre rezultaty.
Witam , robiac wlasnie to zadanie napotkalem pewien problem
moj kod na ideone: https://ideone.com/WCsQWu9
A mianowicie , dla 3 potergi liczby 5 wychodzi mi wynik 124 , ktos ma pomysl dlaczego?
Witam proszę o podpowiedź jak zrobić modulo z liczby wpisanej jako double.
Jeżeli zmienię na inta to 5 do 2 daje mi jako 24 a to zły wynik.
Sam wpadłem na to że daną trzeba zmienić na double ale w tedy niestety modulo nie chce mi
liczyć. Proszę o jakieś sugestie co zrobić. Mój kod:
#include
#include
#include
using namespace std;
double a, b, wynik, ile;
int main()
{
cin>>ile;
for (int i=0; i<=ile; i++)
{
cin>>a>>b;
wynik=pow(a,b);
cout<<wynik % 10;
}
return 0;
}