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

Potęgowanie c++

Object Storage Arubacloud
0 głosów
2,742 wizyt
pytanie zadane 15 sierpnia 2018 w C i C++ przez Nowacx02 Obywatel (1,060 p.)

Witam robię zadanie w którym należy spotęgować 2 liczby a następnie wypisać ostanią liczbe z sumy(?) potęgowania.

Użyłem do tego funcji pow() z biblioteki math.h, jednak coś szwankuje i przy danych np. 10 2 wynik to 99. Oto kod:

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

using namespace std;

int main()
{
    int n;
    cin>>n;
    if (n<1||n>10)
        return 0;

    for(int i=0; i<n; i++)
    {
        long long a,b,pot,c=0;
        cin>>a>>b;
        pot = pow(a,b);
        cout<<pot<<endl;
         if(pot%10==0)
            {
                cout<<c<<endl;
                continue;
            }
        while (pot>0)
        {
            c*=10;
            c+=(pot%10);
            pot/=10;
        }
        string napis = to_string(c);
        napis.erase(1);
        cout<<napis<<endl;
    }

    return 0;
}

A to przykładowe dane wejściowe i dziwne wyniki w konsoli:

komentarz 15 sierpnia 2018 przez niezalogowany
Coś mi się tu nie zgadza. Jak brzmi dokładnie treść zadania?
komentarz 15 sierpnia 2018 przez criss Mędrzec (172,590 p.)
Chodzi o SPOJ "Czy umiesz potęgować"? Temat przewijał się miliony razy na forum. Użyj wyszukiwarki. Jeśli o to chodzi, to zamknij temat i oznacz jako duplikat.
komentarz 15 sierpnia 2018 przez fido Nowicjusz (100 p.)

Jeżeli chodzi o SPOJ to owszem temat do zamknięcia.
Jest jednak problem funkcja pow() zwraca błędny wynik.  Dla porównania napisałem funkcje potega() i dla tych samych danych  dane wyjściowe są prawidłowe. 

 

#include <iostream>
#include <cmath>

using namespace std;

int a=1, b;

int potega(int a, int x)
{
    int p;
    if(x==0) return 1;
    else p=a*potega(a,x-1);
    return p;
}


int main()
{

    for(int i=0;i<=8;i++)
        {
            int p=pow(10,i);
            int r=p%10;

            int p2=potega(10,i);
            int r2=p2%10;

            cout<<"pow(10,"<<i<<") "<<p<<" "<<r<<"  potega(10,"<<i<<") "<<p2<<" "<<r2<<endl;
        }
    return 0;
}

 

W pętli for kolejne potęgi, od 0 do 8, funkcją pow() i potega(). Gdzie jest problem??

1
komentarz 15 sierpnia 2018 przez fido Nowicjusz (100 p.)

1 odpowiedź

0 głosów
odpowiedź 15 sierpnia 2018 przez Kacper Sas Dyskutant (8,460 p.)

Zgaduję, że zadanie ze SPOJ'a pt. "Czy umiesz potęgować".

Proponuję Ci na kartce rozpisać sobie różne kombinacje potęgi na jednocyfrowych liczbach i trzeba zauważyć pewną rzecz. W programie nie trzeba w cale wykonywać potęgowania.

Z zadania można wyczytać - ( 1a,b ≤ 1 000 000 00 )

Przyjmijmy a = 1 000 000, natomiast b = 1 001 423.

a^b - jaki typ danych pomieści Ci taką liczbę?

 

komentarz 15 sierpnia 2018 przez Nowacx02 Obywatel (1,060 p.)
No ok ale dlaczego są wyniki typu 99 albo 9999999?
komentarz 15 sierpnia 2018 przez Bondrusiek Maniak (61,370 p.)

@Nowacx02

Przeczytaj sobie definicje funkcji pow.

double pow (double base, double exponent);

 

Ty natomiast do tej funkcji przesyłasz typ całkowity. U mnie kompilator wyświetlił błąd

main.cpp:17: ostrzeżenie: implicit conversion turns floating-point number into integer: 'double' to 'long long'

Wydaje mi się że podczas tej konwersji long long na double jest ucinana/dodawania końcówka do liczby. Stąd ten błąd.

Podobne pytania

–1 głos
2 odpowiedzi 350 wizyt
pytanie zadane 13 marca 2017 w C i C++ przez Poeta Doctus Użytkownik (740 p.)
+1 głos
1 odpowiedź 427 wizyt
pytanie zadane 18 grudnia 2016 w Programowanie przez Poeta Doctus Użytkownik (740 p.)
0 głosów
2 odpowiedzi 7,194 wizyt
pytanie zadane 28 września 2017 w C i C++ przez szybki453 Nowicjusz (190 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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!

...