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

Potęgowanie dużych liczb

VPS Starter Arubacloud
0 głosów
1,614 wizyt
pytanie zadane 7 listopada 2018 w C i C++ przez Shimeo7 Obywatel (1,910 p.)

Mam pytanie natury technicznej(przeszukałem m.in. forum spoja) otóż, konkretnie chodzi mi o to zadanie https://pl.spoj.com/problems/PA05_POT/. Czy idzie to zadanie zrobić takim tokiem myślenia jak to jest w kodzie? Generalnie to co wstawiłem to spoj nie zalicza, zrobiłem inną metodą i poszło[jeśli ktoś ma problem z tym zadaniem to mogę nakierować]. Chodzi mi tylko o odpowiedź czy się da, jeśli tak to prosiłbym o wskazówki(chcę zaspokoić swoją ciekawość).

#include <iostream>
#include <math.h>
#include <sstream>
#include <string>

using namespace std;

long double wynik;
long int liczba;
long int potega;
int test, dlugosc;

int main()
{
    cin >> test;
    if(test>=1 && test<=10)
    {
    while(test!=0)
        {
            cin >> liczba >> potega;
            if((liczba>=1 && liczba<=1000000000) && (potega>=1 && potega<=1000000000))
            {
            wynik = pow(liczba, potega);

            ostringstream nwynik;
            nwynik << wynik;
            string str = nwynik.str();

            dlugosc = str.length();
            string nowywynik = str.substr(dlugosc-1,1);

            cout << nowywynik <<endl;

            test--;
            }
        }
    }
    return 0;
}

 

komentarz 7 listopada 2018 przez rafal.budzis Szeryf (85,260 p.)
Pobieranie ostatniej cyfry poprzez konwersje na string jest chyba najwolniejszym i najbardziej pamiecio żernym sposobem na pozyskanie tej liczby. Wydaje mi się ze reszta z dzielenia przez 10 będzie dużo szybsza ;)

3 odpowiedzi

+1 głos
odpowiedź 7 listopada 2018 przez Bosswell Nałogowiec (36,470 p.)
wybrane 8 listopada 2018 przez Shimeo7
 
Najlepsza
Wypisz sobie na kartce kolejne potęgi kolejnych liczb. Na pewno zauważysz pewien schemat w ich ostatnich cyfrach. Schemat ten można zapisać jako algorytm.
0 głosów
odpowiedź 7 listopada 2018 przez monika90 Pasjonat (22,940 p.)

Chodzi mi tylko o odpowiedź czy się da

Zadanie da się zrobić za pomocą funkcji pow z biblioteki standardowej. Nie musisz podnosić do potęgi dużych liczb, bo wynik zależy tylko od ostatniej cyfry podstawy, więc potęgujesz tylko tę ostatnią cyfrę. Wykładnik też można zredukować do czegoś małego.

ostringstream nwynik;
nwynik << wynik;
string str = nwynik.str();

dlugosc = str.length();
string nowywynik = str.substr(dlugosc-1,1);

 Po co takie kombinacje???

komentarz 7 listopada 2018 przez Shimeo7 Obywatel (1,910 p.)
Wiem wiem, w sumie to tylko takie coś znałem do niedawna.
0 głosów
odpowiedź 7 listopada 2018 przez Shimeo7 Obywatel (1,910 p.)
Tzn wiem wiem o tej kolejności z tych potęg, to wiem i tak właśnie to zadanie wykonałem, ale nurtuje mnie jedna rzecz. Czy z kodu, który wstawiłem da się np otrzymać prawidłowy wynik dla 1 000 000 000 ^ 1 000 000 000?
komentarz 7 listopada 2018 przez niezalogowany

Liczba pokroju 10^9000000000 tak średnio da się umieścić w long double :D Z tego powodu na łańcuch zostaną przekonwertowane błędne wartości.

BTW. Wyrzuć sprawdzenia z kodu (SPOJ nie da takich testów):

(test>=1 && test<=10
if((liczba>=1 && liczba<=1000000000) && (potega>=1 && potega<=1000000000))

Podobne pytania

0 głosów
0 odpowiedzi 783 wizyt
pytanie zadane 21 marca 2018 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 900 wizyt
0 głosów
1 odpowiedź 758 wizyt

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...