Alakítsunk át egy 10-es számrendszerben megadott számot 2-es számrendszerbe?
Ez a feladat C++-ban.
A fejemben megvan az algoritmus,csak nem tudom átültetni C++-ra.
Szóval:
Bekérem az adott számot,és amíg nem 0 osztogatom 2-vel.az eredményt feltöltöm 1 tömbbe,majd a tömb tartalmát kiíratom visszafelé.
Valószínűsítem hogy while ciklussal kell,bár az általam írt kód kifagy.
Tudna valaki segíteni?
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int szam,x,y,i,tomb[i];
cout<<"Szam: ";
cin>>szam;
x=0;
i=0;
do
{
i++;
x=(szam%2);
x=tomb[i]; }
while(szam>0);
system("PAUSE");
return EXIT_SUCCESS;
}
Uhha, már korábban elvesztél a programozásban úgylátom.
A hibák:
* változó méretű tömböt nem lehet így létehozni. Fix méretű kell.
* a 'szam' változót nem csökkented sehol. Végtelen ciklusban marad.
* x = tomb[i] véletlen megfordult.
* a tömböt 1-től kezded feltölteni. Mi a baj a tomb[0]-val?
Alapvetően (legalább) 2 módszerrel lehet ezt megoldani, szerintem szebb tömb nélkül. (Addig hatványozol amíg több nem lesz a számnál, onnantól pedig a szam/hatvany értékét írod ki sorban. Így nem akad el nagyobb számokkal sem.
int hatvany = 1;
while (hatvany*2 <= szam) hatvany*=2;
while (szam > 0) {
cout>>(szam/hatvany);
szam %= hatvany;
hatvany /= 2;
}
Így gondoltam, nem teszteltem.
Bekérés:
cout << "Átváltás 10-es számrendszerből 2-esbe." << endl;
cout << "Adjon meg egy számot, és átváltom." << endl;
cout << "Kérem a számot:" << endl;
int n;
cin >> n;
Vaaaaagy... mivel tudjuk, hogy a gép kettes komplemensű bináris számként tárolja, simán kihasználhatjuk ezt és rámehetünk a bitműveletekre.
int szam = 123456789;
if (szam > 0)
{
bool hit = false;
int mask = 1 << 30;
//itt megkeressük a legnagyobb bitet. erre vannak egyszerű, platformfüggű műveletek, de azokat most ne használjuk ki
while (!hit)
{
hit = szam & mask;
mask >>= 1;
}
std::cout << '1';
while (mask > 0)
{
std::cout << int(bool(szam & mask));
mask >>= 1;
}
}
else
{
std::cout << '0';
}
Természetesen nem teszteltem, de tetszik.
Nekem is tetszik a megoldásod!
Leteszteltem, működik.
Egyébként kérdezőnek: sikerült valahogy (csinálhatod a "hagyományos" módszerrel, ha az könnyebben érthető. )
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!