Problem w moim latwym kodzie

0

Witam, proszę o pomoc w znalezieniu błędu w kodzie. Tyczy się on zadanie ze strony SPOJ: "Czy umiesz potęgować?":
Link do treści zadania: http://pl.spoj.com/problems/PA05_POT/

#include <iostream>
using namespace std;
int potega(int a,int b)
{
    int c=a;
    while(b>1)
    {
        a=a*c;b--;
    }
    return a;
}

int main()
{
    int n,a,b;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a>>b;
            if((a%10==0)||(a%10==1)||(a%10==6)||(a%10==5)){cout<<a%10<<endl;}
            else if((a%10==2)||(a%10==3)||(a%10==8)||(a%10==7)){cout<<(potega(a,b))%10<<endl;}
            else if((a%10==9)||(a%10==4)){if(b%2==0){cout<<(a+2)%10<<endl;}else{cout<<a%10<<endl;}}

    }
    return 0;
}

Nie wiem, co jest tu nie tak. :(

0

Algorytm jest błędny co widać już na pierwszy rzut oka. Dla przypadku gdzie nieudolnie próbujesz liczyć te potęgi to się wysypie bo przekroczysz zakres inta. Przecież ty tam mozesz dostać 1 000 000 000 ^ 1 000 000 000 a int ma 32 bity! Pomyśl trochę!
Gdybyś juz bardzo chciał to tak naiwnie liczyć to robiłbyś modulo od razu w trakcie liczenia potęgi, żeby cały czas mieć małe liczby.

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