Math For Developers - Exercise, Problem 2
Здравейте, колеги!
Може ли да помоля, някой който е присъствал на тази лекция да сподели, как сте решили втория проблем :
искаме да конвертираме 23 в бинари
23/2 = 11 , остатък 1
11/2 = 5, остатък 1
5/2 = 2, остатък 1
2/2 = 1, остатък 0
1/2 = 0, остатък 1
Печатаме 10111.
Цял ден съм се овъртял в някакви странни писания и не мога да изкарам точно това условие, иначе намерих всевъзможни начини за конвертиране :)
Значи, още повече се обърках, но пък и си поизясних нещо.
До момента мислех така:
using System;
namespace DecimalToBinary
{
class DecimalToBinary
{
static void Main()
{
Console.WriteLine("Enter a decimal number:");
int x = Int32.Parse(Console.ReadLine());
int y = x / 2;
int z = x % 2;
Console.WriteLine("Numbers: {0}, {1}", y, z);
}
}
}
И тук въртя разни варианти, как да взема остатъка и резултата и да ги използвам докато стигне 0. Пробвах с for, но ми изби грешка. Разиграх и доста други варианти и сега ти ми даде май най-лесния, който няма нищо общо с това, което мъчех до момента :)
Някакви идеи, как може да се довърши по начина, по който съм тръгнал / понеже е доста опростен / и искам да го разбера.
Начинът ти ще работи, но няма да принтира наобратно :)
Вместо да използваш нова променлива, която да ти дава резултата от цялочисленото деление, просто променяй x. Там където казваш "y" да е равно на "x" делено на две, можеш да кажеш на "х" да е равен на "x" делен на две. Тогава ще може да използваш while цикъл (може да се наложи да прочетеш за него), който го пускаш да върти докато "х" е по-голям от 0
int x = 22;
while ( x > 0 )
{
int z = x % 2;
x = x / 2;
Console.WriteLine("Numbers: {0}, {1}", x, z);
}
Така, както си го написал не се ли получава безкраен резултат? Извинявай за глупавите въпроси, но тепърва започвам :)
Виж, какво интересно решение намерих, което сега си обяснявам:
{
Console.WriteLine("Enter a decimal number:");
int x = Int32.Parse(Console.ReadLine());
string counter = "";
while (x >= 1)
{
counter = (x % 2) + counter;
x = x / 2;
}
Console.WriteLine(counter);
}
....което в същност е почти същото като това, което ми каза ти :D