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

Zadanie SPOJ "Czy umiesz potęgować?" problem z zapisem liczby w postaci dziesiętnej

Object Storage Arubacloud
0 głosów
475 wizyt
pytanie zadane 18 maja 2016 w C i C++ przez sparklemo7ion Początkujący (360 p.)

link do zadania --> http://pl.spoj.com/problems/PA05_POT/
kod: 
 

#include <iostream>
#include <math.h> // pow
#include <sstream> //stringstream
#include <iomanip> //setprecission
using namespace std;

int main ()
{
int l_testow;
double liczba, wykladnik;
int licznik = 0;
cin >> l_testow;
cout << setprecision (100); // zamienia liczby z postaci "naukowej" do dziesietnej

while ( l_testow > licznik )
{
    cin >> liczba >> wykladnik;
    double wynik = pow (liczba, wykladnik ); //potegowanie
    cout <<wynik<< endl;

stringstream s; //potrzeby do konwersji string to int
s << wynik;
string convert = s.str();

    double dlugosc = convert.size();
    cout << convert[dlugosc-1]<<endl;
    licznik++;
}

return 0;
}

Witam wszystkich serdecznie! Problem polega na tym że SPOJ nie zalicza mi zadania, a to zapewne dlatego, bo przy większych liczbach do stringa zapisuje mi się liczba w postaci naukowej. No więc na wyjściu zamiast ostatniej cyfry dostaje liczbę miejsc po przecinku...
setprecision działa tylko do linijki:    

cout <<wynik<< endl; 

i pokazuje liczbę dziesiętną.
Do stringa zapisuje się jak już wspomniałem tylko w postaci naukowej.
Może ktoś z tym pomóc? Z tego co wyczytałem to próbowałem gdzieś "włożyć" w kod std::fixed ale nie podziałało, może dlatego że nie wiem jak go dokładnie użyc :P
Jestem "nowy" w programowaniu więc proszę o wyrozumiałość :) 

komentarz 18 maja 2016 przez .kassad Gaduła (3,420 p.)
A gdybyś zamiast konwertować liczbę na stringa, wypisał resztę z dzielenia wyniku potęgowania przez 10? Rozwiązanie byłoby dużo prostsze, no i szybsze.
komentarz 18 maja 2016 przez sparklemo7ion Początkujący (360 p.)
Dzieki, wyprobuje:)

2 odpowiedzi

0 głosów
odpowiedź 18 maja 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)

Dane wejściowe 

1 ≤ a,b ≤ 1 000 000 000).

Czy ty chcerz pomieścić liczbę 10^81 w komupetrze ??? Na początku poucz się jakie liczby przechowuje dany typ liczbowy. Potem bierz się za takie zadania. Bo rozwiązaniem jest arytmetyka modularna i algorytm szybkiego potęgowania

komentarz 18 maja 2016 przez sparklemo7ion Początkujący (360 p.)
Czyli mam odpuscic to zadanie? Na razie nie mam w ogole wiedzy na ten temat bo jestem poczatkujacy.
komentarz 18 maja 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
Żeby nie było, że zniechęcam to pierw poucz się o typach danych i jak to mniej więcej trybi. Potem ogarnij sobie notacja dużego O ( podstawy algorytmiki ), arytmetykę modulo i szybkie potęgowanie. Potem wróc do tego zadania ( np. za 3dni )  i spróbuj to napisać
0 głosów
odpowiedź 18 maja 2016 przez CzikaCarry Szeryf (75,340 p.)
Nakieruję cię trochę. Nie musisz przetrzymywać całych liczb przy np. potęgowaniu. Co to oznacza? W zadaniu tym potrzebujesz wyznaczyć ostatnią cyfrę. Spójrz na ten przykład: a=27 b=3. 27^3 wynosi 19683, czyli ostatnią cyfrą jest 3. A teraz zróbmy to tak: Weźmy z liczby a tylko ostatnią cyfrę (z liczby b też, ale liczba b ma tylko jedną cyfrę) i teraz policzmy: 7^3. Wynosi to 343. Ostatnią cyfrą tutaj jest też 3. Pozdrawiam i życzę dalszej nauki!
komentarz 19 maja 2016 przez sparklemo7ion Początkujący (360 p.)
Czyli mówisz że jak wezme liczbe 123456 i spotęguje ją przez liczbe 654321 to ostatnia cyfra będzie taka sama jakbym spotęgował samo 6 ^1? :O

Podobne pytania

0 głosów
0 odpowiedzi 432 wizyt
pytanie zadane 28 października 2021 w C i C++ przez DrTomas Nowicjusz (140 p.)
+1 głos
2 odpowiedzi 1,072 wizyt
0 głosów
5 odpowiedzi 801 wizyt
pytanie zadane 31 stycznia 2021 w C i C++ przez Rainbow99 Początkujący (430 p.)

92,634 zapytań

141,505 odpowiedzi

319,883 komentarzy

62,015 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...