1 / 3
Apr 2017

Cześć, ktoś by mógł mi sprwadzić mój kod? jestem pewien że jest dobrze, ale wyskakuje mi że za długi czas połączenia czy coś w ten deseń, oto on :

include

using namespace std;
int long Potega(int long podstawa, int long wykladnik){
while(wykladnik>-1){
if(wykladnik==0)
return 1;
else
wykladnik--;
return podstawa*(Potega(podstawa,wykladnik));

};
};

int main(){
int a,c;
cin>>a;
c=a;
cout <<c;
int long tablica1[a-1];
int long tablica2[a-1];
while(a>0)
{
cin>>tablica1[a-1];
cin>>tablica2[a-1];
a--;

}
  while(c>0)
{

    cout<<Potega(tablica1[c-1],tablica2[c-1])%10<<endl;
    c--;
}

return 0;}

  • created

    Apr '17
  • last reply

    Apr '17
  • 2

    replies

  • 407

    views

  • 3

    users

Pierwsza rzecz:
-Rozmiar tablicy jest stałą nie zmienną.
-Nie musisz liczyć w tym zadaniu np. 13^14 zobacz w jaki sposób cyfry po sobie następują.
-Dane które twoj program pobiera sa po enterach, gdzie druga dana jest jest np "10 4" więc wczytuje tylko 10

  1. Niepotrzebnie wczytujesz dane do tablicy .
  2. Wczytywanie można oprawić na ;

    cin >> zmienna1 >> zmienna2 ;

  3. Program nigdy nie wyrobi się w czasie przez ogrom obliczeń jaki będzie musiał wykonać .
    Zobacz w zadaniu jakie są maksymalne dopuszczalne wartości potęgi .

    2^1 000 000 000

Jeżeli wykonanie tych miliarda mnożeń zajmie sekunde ( wykonalne na współczesnych prockach ) to i tak pozostanie do wykonania jeszcze pozostałe testy -- i już nie będzie czasu, a sędzia przerwie program .

4). W większości języków jest dostępna biblioteka matematyczna z podstawowymi operacjami takimi jak potęgowanie . Użyj jej zamiast pisać własne procedury .

5). Zastosowałeś w procedurze potęgowania rekurencje - ze względu na ograniczenia pamięciowe nie ma szans żeby powiodło się wykonanie tej procedury dla maksymalnych danych . Z każdym razem gdy wywołujesz jakąś funkcje/procedure na stos programu kładziona jest ramka z danymi takimi jak miejsce z którego zostało zrobione wywołanie , aktualne stany rejestrów . Przy wychodzeniu z funkcji/procedury te dane są zdejmowane i odtwarzane stan rejestrów ( nie wszystkich ) jaki był przed wywołaniem . Ominięciem problemu braku pamięci mogła by być rekurencja ogonowa -- czy twój kompilator potrafi ten kod do takiej rekurencji ogonowej przekształcić dowiesz się jak zrobisz test dla danych :

1
3 1000000000