Преобразуване на дадено число от десетична в двоична бройна система.
Здравейте,
Изцяло нов съм в света на програмирането и почнах да чета книгата "Въведение в програмирането със C#". На една от задачите в глава 6 се затруднявам в решението. Става дума за въпрос 12. Напишете програма, която преобразува дадено число от десетична в двоична бройна система. В интеренет намерих информация за начина на преобразуване, а именно: За да превърнем число от десетична в двоична бройна система, трябва да го разделяме на 2, докато частното стане нула като записваме остатъците вдясно (ако числото не може да се дели на 2, записваме единица, а ако може - нула).
Освен това намерих доста решения на задачата, някои са прекалено сложни, други само с метода Convert.ToString(n, 2). Аз обаче искам да използвам само loops и съответно искам да разбера защо моят код не работи, след като то моята логика следвам това, което е записано на теория.
Ето го и моя код:
Console.Write("Enter N: ");
int n = int.Parse(Console.ReadLine());
int divider = 2;
int a;
for (int i = n; i <= 0; i /= 2)
{
if (i % divider == 0)
{
a = 1;
Console.Write(a);
}
else if (i % divider != 0)
{
a = 0;
Console.Write(a);
}
}
Благодаря, предварително.
Мерси за коментара. Направих леки промени в loop-a и if-овете. Така успях да стигна до момента с обратното получаване на двоичното число. Ето какво направих като корекции, в червено са:
Console.Write("Enter N: ");
int n = int.Parse(Console.ReadLine());
int divider = 2;
int a;
for (int i = n; i
<!= 0; i /= 2){
if (i % divider == 0)
{
a =
10;Console.Write(a);
}
else if (i % divider != 0)
{
a =
01;Console.Write(a);
}
}
Резултатът е следния: при въведено число 66 изкарва 0100001, a коректният резултат е 1000010. Открих примерен код за обръщане:
Console.WriteLine("Enter a Number");
int numb = int.Parse(Console.ReadLine());
int reverse = 0;
while (numb > 0)
{
int rem = numb % 10;
reverse = (reverse * 10) + rem;
numb = numb / 10;
}
Console.WriteLine("Reverse number={0}", reverse);
Console.ReadLine();
}
Но в моя код не мога да го имплементирам за да работи както трябва.
Здравей,
За да си обърнеш числото, вместо да принтираш на всяка итерация, го запиши в променлива. Най - лесно ще е ако тази променлива е стринг. След това лесно ще обърнеш и принтираш стринга. Решението, което си намерил е за огледално обръщане на инт, но в двоично число (започващо или завършващо на 0), няма да е ОК.
Поздрави!
Здравей,
И пак благодаря за насоките.
От както ми писа се мъча, но стигнах само до тук:
Console.Write("Enter N: ");
int n = int.Parse(Console.ReadLine());
int divider = 2;
string a = "";
for (int i = n; i != 0; i /= 2)
{
if (i % divider == 0)
{
a = "0";
}
else if (i % divider != 0)
{
a = "1";
}
Console.Write(a);
}
Обръщането на стринга, гледайки в нета, не мога да го съчетая с дотук написания ми код.