Dziękuję za odpowiedź, poprawiłem błąd, lecz nadal to samo, błędna odpowiedz
#include <iostream>
using namespace std;
int potega(int a,int b)
{
unsigned long long p=1;
if(b==0)
{
return 1;
}
else{
switch(b%4)
{
case 0:
for(int i=0;i<4;i++)
{
p=p*a;
}
return p%10;
break;
case 1:
return a%10;
break;
case 2:
for(int i=0;i<2;i++)
{
p=p*a;
}
return p%10;
break;
default:
for(int i=0;i<3;i++)
{
p=p*a;
}
return p%10;
break;
}
}
}
int main()
{
int D;
int a,b;
cin>>D;
for(int i=0;i<D;i++)
{
cin>>a>>b;
cout << potega(a,b)<< endl;
}
return 0;
}
np
10000001 4
i tak dalej.
Wychodzi poza zakres unsigned long long - musisz jeszcze coś poprawić - przemyśleć.
PS
Twoją funkcję [po poprawieniu tego czegoś] można napisać dużo prościej, bez switch i tylko z jedną pętlą:
if (b ==0)
return .... //jak tu jest return, to dalej nie potrzeba else
b = b % 4;
p = 1;
if (b == 0) b = 4;
for (int i = 0; i < b; ++i)
p *= a;
return ...
PS 2
A jeżeli koniecznie chcesz, ze switch, to np tak:
case 0:
p = a*a*a*a;
break;
case 3:
p = aaa;
break
itd
return p%…
PS 3
A jeszcze chytrzej [ze switchem]:
p = 1;
…
case 0:
p *= a;
case 3:
p *= a;
case 2:
p *= a;
case 1:
p *= a;
default //
break; //dopiero tu jeden break lub od razu return p%…
return p…
Podpinam się pod post.
Otrzymuje poprawne dane na wyjściu, zakres nie jest przekroczony. Wydaje mi się że wszystko jest dobrze. Po przesłaniu otrzymuję: błąd wykonania (NZEC) Ktoś podpowie, co robię źle?
Poniżej przesyłam kod (Python3):
def potega (x,y):
if y==0: return 1
else:
return (x*(potega)(x,(y-1))%10)D = abs(int(input()))
i=1
while (i<=D):
a,b = input().split()
print(potega(abs(int(a))%100,abs(int(b))%100))
Nie znam sie za bardzo na Pythonie, ale...
Wczytujesz liczbe danych na wejsciu a potem kolejne liczby z wejscia - ok. Nie wiem po co jest ten abs, ale niech bedzie ze spoj wymaga czy cos tego typu. W kazdym razie przepisalem po kolei Twoj skrypt i interpreter podolal.
Za to funkcji kompletnie nie pojmuje. Rozumiem print(potega(abs(int(a)),abs(int(b)))), ale tu modulo 100 tam modulo 100 tam modulo 10... Do tego rekurencyjne wywolywanie potegi?!
Nie wiem jaki masz pomysl na to zadanie, ale rozwiazanie jest w czasie O(t), gdzie t to liczba testow. Jak wolisz odpowiedz dla kazdej pary liczb jest w O(1). Mysle ze powyzsza funkcja dziala wolniej...
Poza tym dla maksymalnych wartosci a i b uzyskalem bledna odpowiedz.
Czy może ktoś mi pomóc? Przekracza limit czasu
https://ideone.com/PEajTG39