Професионална програма
Loading...
+ Нов въпрос
remote87 avatar remote87 121 Точки

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.

Цял ден съм се овъртял в някакви странни писания и не мога да изкарам точно това условие, иначе намерих всевъзможни начини за конвертиране :)

0
Programming Basics
RoYaL avatar RoYaL Trainer 6846 Точки
Best Answer

Това с код ли трябва да стане? Дай да видим как се опитваш да го решиш? Ако ползваш оператора % ще ти върне остатъка - може би това търсиш? После принтирането трябва да е наобратно (.Reverse() или for цикъл от String.Length до 0 - евентуално ще трябва да гугълнеш второто).

int x = 22;

String output = "";

output += x % 2; // добавяме към изхода остатъка от делението на 2

x = x / 2; // правим числото да е равно на резултата от цялочисленото деление на 2

// повтаряме операцията докато "x" не стане 0.

1
remote87 avatar remote87 121 Точки

Значи, още повече се обърках, но пък и си поизясних нещо.

До момента мислех така:

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, но ми изби грешка. Разиграх и доста други варианти и сега ти ми даде май най-лесния, който няма нищо общо с това, което мъчех до момента :)

Някакви идеи, как може да се довърши по начина, по който съм тръгнал / понеже е доста опростен / и искам да го разбера.

0
RoYaL avatar RoYaL Trainer 6846 Точки

Начинът ти ще работи, но няма да принтира наобратно :)

Вместо да използваш нова променлива, която да ти дава резултата от цялочисленото деление, просто променяй 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);

}

1
10/08/2015 01:38:10
remote87 avatar remote87 121 Точки

Така, както си го написал не се ли получава безкраен резултат? Извинявай за глупавите въпроси, но тепърва започвам :)

Виж, какво интересно решение намерих, което сега си обяснявам:

{
            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

0
10/08/2015 01:44:52