Informatică, întrebare adresată de niorbaana, 8 ani în urmă

Buna ! Imi poate spune cineva de ce nu functioneaza codul :

#include


using namespace std;

int main()

{

int a , putere=1 ;

cin>>a;

for(int i=0;i<16;i++)

putere=putere*a;

cout<< putere;

return 0;

}

cerinta => https://www.pbinfo.ro/?pagina=probleme&id=2599


boiustef: mai concret ce rezultat obţii? Tipul int, cred nu va suporta atâtea înmulţiri...
Se cere asta " Aplicați de cât mai puține ori operatorul de înmulțire."
niorbaana: Pentru 2 , 3 imi afiseaza rezultatele corecte ; la a=4 imi afiseaza 0 ;si daca introduc valori mai mari de 4 programul nu mai afiseaza rezultatul corect..

Răspunsuri la întrebare

Răspuns de CinevaFaraNume
1

Tipul signed int nu poate memora numere mai mari decat cam 2\times 10^9 (2^{31}). O solutie este sa folosesti tipuri de numere intregi mai mari (long long, pana la 2^{63} \approx 0.9\times 10^{19} sau unsigned long long 2^{64} \approx 1.84\times 10^{19}).

#include <iostream>

using namespace std;

int main()

{

unsigned int a;

unsigned long long int putere=1 ;

cin>>a;

for(int i=0;i<16;i++)

putere=putere*a;

cout<< putere;

return 0;

}


niorbaana: Mersii
CinevaFaraNume: Cu placere
Răspuns de boiustef
1

Răspuns:

#include <iostream>

using namespace std;

int main()

{

   long long a;

   cin >> a;

   a=a*a;

   a=a*a;

   a=a*a;

   a=a*a;

   cout << a;

   return 0;

}

Explicație:

e încă o variantă...

se putea de folosit un for pentru acele 4 înmulţiri a=a*a, adică

for (int i=0; i < 4; ++i )

a=a*a;


niorbaana: Multumesc
Alte întrebări interesante