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 6849 Точки
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 6849 Точки

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

Вместо да използваш нова променлива, която да ти дава резултата от цялочисленото деление, просто променяй 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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.