Dzień dobry,
jestem tutaj nowy, a programowania uczę się dopiero od trzech tygodni.
Staram się rozwiązać problem zadania 499, ale nie potrafię sobie poradzić z wypisaniem ostatniej cyfry z działania.
Przy zmiennej int nie było problemu i uzyskiwałem ją poprzez resztę z dzielenia i zastosowanie wskaźnika modulo. Program wydaje się, że działał wtedy zupełnie poprawnie. Potęgował oraz wypisywał ostatnią liczbę z wyniku, ale działał tylko dla małych liczb.
Niestety int nie nadaje się do dużych liczb tak jak jest to opisane w zadaniu, więc zmieniłem zmienną na typ “long double”. Teraz dostaję już wyniki z dużych liczb, i poprzez funkcję “setprecision” ustawiłem wyświetlanie liczb w formie dziesiętnej nawet do 10.000 znaków. No, ale teraz dostaje błąd w konsoli i nie mogę uzyskać dzielenia z zastosowaniem wskaźnika modulo (konsola wskazuje, że działanie to nie nadaje się do zmiennej typu long double). Potęguje dobrze (można wypisać wynik poprzez prostego cout<<wynik; i wynik jest poprawny i pokazuje duże liczby), ale nie potrafię się dostać do ostatniej cyfry wyniku. Prosiłbym o podpowiedź: czy powinienem poszukać innego sposobu na dzielenie dużej liczby aby wyznaczyć ostatnią czy np. spróbować przerobić tę zmienną long double na zmienną typu string (nie wiem czy głupot nie piszę) i spróbować się dostać poprzez zastosowanie wskaźników. A być może jeszcze inaczej.
Nie gniewajcie się jeżeli napisałem jakieś głupoty, uczę się krótko i samodzielnie i może po prostu to zadnie mnie przerasta. Będę wdzięczny za wskazówki jak można to rozwiązać lub jeżeli mój program jest do niczego to dajcie znać, może czas na jakąś kurs programowania…
Ps. Piszę na Codeblock na iOS.
A to program:
#include (iostream)
#include (cmath)
#include (iomanip)
using namespace std;
int ile;
long double p,w,wynik=1; // jak zmienimy zmienną na int to program działa prawidłowo, ale dla małych liczb
int main()
{
cin>>ile;
for (int i=1;i<=ile;i++)
{
cin>>p>>w;
wynik=pow(p,w);
cout<<setprecision(10000);
cout<<wynik%10<<endl; // tutaj wyskakuje mi bład przy zmienne long double, a działa prawidłowo przy int
wynik=1;
}
return 0;
}