Se stie ca orice numar natural nenul poate fi scris ca suma de puteri ale lui 2.De exemplu,n=20 se scrie ca 2^4 + 2^2.Scrieti in C++ un program care citeste de la tastatura un numar natural n si scrie exponentii din scrierea lui n ca suma de puteri ale lui 2.
Va multumesc!
Hai ca i-am dat de cap dupa vreo ora de munca:
Sa-ti explic pentru ca acest cod este cam ambiguu la prima vedere. In primul ciclu iau exponentul maxim al scrierii numarului dat sub forma sumei puterilor lui 2. In cazul lui 20, acel s va fi 4.
Apoi afisez secvential exponentii care sunt mai mici decat exponentul maxim luat in primul for dar care respecta conditia aceea din if. s-ul se incrementeaza, daca este egal cu numarul, for-ul se opreste.
Pentru diversificare, o implementare in Python:
wow,mersi!am inteles cu c++ dar python nu am facut la scoala
Stiu ca nu se face la scoala python. Acum m-am apucat sa-l invat si eu si incerc sa diversific diferite implementari. Am pus codul pentru a vedea diferentele (extrem de mici) dintre cele doua limbaje.
Pentru puterile lui 2 nu trebuie sa faceti cicluri FOR sau WHILE, ci se pot face in C++ direct pe biti, si anume operatia de shiftare spre dreapta cu o pozitie.
De exemplu, daca vreau sa calculez 2^n, fac urmatorul algoritm:
E mult mai eficient din punctul de vedere al timpului de executie!!!
Wow! Eu nu prea am inteles pana acum operatiile pe biti. Am auzit ca sunt extrem de rapide dar niciodata nu am intentionat sa le utilizez. O sa le dau mai multa atentie de acum incolo. Thanks, dude!
Depinde ce scoala ai facut. Daca e una cu specific informatic, evident ca e posibil sa se faca python. In scolile normale nu se face.
#include<iostream>
using namespace std;
int main(){
int n, a = 0;
cin >> n;
while(n != 0){
if(n % 2 == 1)
cout << a<< ” „;
n /= 2;
a++;
}
}
Destul de rar ajungi sa le si folosesti pentru ca nu foarte multe probleme pot fi rezolvate cu simplii operatori logici(cel putin eu, toate cazurile pe care le-am intalnit erau pur teoretice, exemplu cazul din thread). Dar principiul lor e foarte simplu. Trebuie doar sa privesti numarul in binar, restul logicii vine de la sine. AND,NOT,OR,XOR etc. toate aplicate pe bitii care compun numarul(desigur, cu simbolistica de rigoare folosita in C).
Acum depinde cu cine ai facut programarea. Stiu ca in primu’ an Carmen Odubasteanu ne-a aratat cate ceva la curs legat de operatii pe biti. Cel mai bine le-ai fi inteles de la Calculatoare Numerice dar de obicei acolo nu se dadea prea mult interes(cel putin la CC).