• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem ze SPOJ zadanie "czy umiesz potęgować"

Object Storage Arubacloud
0 głosów
389 wizyt
pytanie zadane 24 lutego 2017 w SPOJ przez Mateusz K Nowicjusz (150 p.)
zmienione kategorie 24 lutego 2017 przez Patrycjerz

Zabrałem się ostatnio za zadanie ze SPOJ czy umiem potęgować. Mianowicie oddałem rozwiązanie do sędziego na moim komputereze wszystkow wychodziło po czym patrze błedna odpowiedz. Nie mam pojęcia co mam źle.

Link do zadania: http://pl.spoj.com/problems/PA05_POT/

#include <iostream>
#include <cmath>
 
using namespace std;
double a[10],b[10];
int suma[10];
int ile;
int main()
{
    std::cin>>ile;
    for(int i=0; i<ile; i++)
    {
    std::cin>>a[i]>>b[i];
    suma[i]=(pow(a[i],b[i]));
    std::cout<<suma[i]%10<<endl;
    }
    return 0;
} 

 

3 odpowiedzi

0 głosów
odpowiedź 24 lutego 2017 przez CzikaCarry Szeryf (75,340 p.)
wybrane 24 lutego 2017 przez Mateusz K
 
Najlepsza
Zakres liczb to 1<= a,b <=1 000 000 000, Takich liczb int nie pomieści, a tym bardziej nie 1 000 000 000^1 000 000 000, poza tym liczenie takich liczb po wcześniejszym zaimplementowaniu odpowiedniego typu zajęłoby dla komputera baaardzo dużo czasu. Zadanie jest proste jak drut, można je rozwiązać przy pomocy jednej operacji modulo i jednego switch... case. Więcej nie mogę podpowiedzieć :)
0 głosów
odpowiedź 24 lutego 2017 przez Marchewka900 Bywalec (2,970 p.)
Możliwe, że przedrostki std. Zadeklarowałeś w 4 linii przestrzeń nazw std, więc później nie powinieneś zapisywać std::cin, std::cout tylko po prostu cin, cout. Twój kompilator może to pomijać, ale inny już nie. A taki inny może być na SPOJu.
komentarz 24 lutego 2017 przez Mateusz K Nowicjusz (150 p.)
Poprawiłem to ale i tak nie działa ale dzięki za chęć
0 głosów
odpowiedź 24 lutego 2017 przez niezalogowany
przywrócone 24 lutego 2017

1 ≤ a,b ≤ 1 000 000 000

Int ma tylko -2mld do 2mld. Nie ma typu liczbowego, który by pomieścił liczbę całkowitą np. 10^18. To zadanie nie jest takie proste. Zmień koncepcję. 

komentarz 24 lutego 2017 przez seba Dyskutant (8,900 p.)
10^18 w teorii przyjmuje double lecz nigdy nie będzie wstanie tyle przyjąć bo to za dużo GB RAMU
komentarz 24 lutego 2017 przez niezalogowany
edycja 24 lutego 2017

Nie wiem do czego miałoby się odnosić do dużo GB :D Double to typ zmiennoprzecinkowy czyli dokładność do znaku, wykładnika i mantysy. Liczba zmiennoprzecinkowa to coś innego niż całkowita. Całkowite można zapisywać z dowolną dokładnością na ich przedziale, a double nie ma zakresu, ale ma skończoną dokładność. Natomiast potrzebna jest ostatnia cyfra danej liczby. Więc w teorii jedyna zmienna, która mogłaby być pozornie użyteczna w tym zadaniu to unsigned long long int - pozornie, bo program będzie za wolny. Dlatego wskazywałem na zmianę koncepcji...

komentarz 24 lutego 2017 przez seba Dyskutant (8,900 p.)
Rzeczywiście mój błąd. Dużo GB tzn że cud będzie jak program zadziała ale nie ważne :)

Podobne pytania

+1 głos
2 odpowiedzi 1,083 wizyt
+1 głos
1 odpowiedź 2,066 wizyt
0 głosów
2 odpowiedzi 350 wizyt
pytanie zadane 7 lutego 2023 w SPOJ przez Tactykalier Nowicjusz (200 p.)

92,666 zapytań

141,564 odpowiedzi

320,020 komentarzy

62,032 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...