Loading...
ViValDam avatar ViValDam 15 Точки

Предлагам ти друг алгоритъм :

Прочети инпута и го Parse в лонг 

След това  при всяко завъртане на цикъла, отделяй с деление на %  последната цифра от полученият лонг (0 или 1)

На първото завъртане на цикъла , отделената последна цифра (която е стойността на бита в позиция 0) умножаваш по 2**0

на второто завъртане  ,отделената последна цифра ( която е стойността на бита от позиция 1) умножаваш по 2 **1

на третото завъртане,  отделената последна цифра  ( която е стойността на бита от позиция 2 ) умножаваш по 2 **2

и т.н. до края на числото

 

Едновременно с това сумираш, стойностите  при всяко завъртане , като крайната сума е числото представено в десетична бройна система.

 

Не съм стигнала до тази задача още, но ей сега ще се опитам да я направя и ще я пусна .

4
Nicky89 avatar Nicky89 15 Точки

Алгоритъма ми е ясен, въпроса е моето решение някъде се "прецаква". 

0
HPetrov avatar HPetrov 822 Точки

Проблема ти идва от това, че четеш битовете от ляво на дясно, а трябва от дясно на ляво. Foreach цикъла не мисля, че е много подходящ като цяло за целта, но като смяташ трябва от най-десния char към най-левия. При "1001" дава правилно "9" но при "1000" -> тука вече мисля че знаеш колко ще даде ;) Друг проблем е ако Input-а ти е "001000" -> "4".

1
Nicky89 avatar Nicky89 15 Точки

Коригирано решение 

Току що го видях и аз това. Мерси все пак за помоща. Мисля, че сега работи ок

-1
dimipan avatar dimipan 30 Точки

Здравей! Според мен, при теб грешката идва от това, че бинарния стринг не е ревърснат, преди цикъла с умножение! От друга страна, мисля че наистина има и по-добри методи за конвертиране на двоично в десетично число - ето един пример: ConvertBinaryToDecimalNumber . Надявам се да съм ти помогнал. Успех със задачите!

2
Slav.Slavchev avatar Slav.Slavchev 25 Точки

Това е точното решение по условието на задачата. Поздравления. Идеята е много добра. :)

1
ViValDam avatar ViValDam 15 Точки

Не знам кой си ти " големият умник" ,който слага минуси за хубави идеи ?

Ето това  money-mouth е от мен за теб !

Ето го и решението на задачата, по моята идея:

using System;
using System.Numerics;


class BinaryToDecimalNumber
{
     static void Main()
    {
        string line;
        BigInteger numberInBin = 0;
        BigInteger numberInDec = 0;
        BigInteger bitValue = 0;

        while (true) // Loop indefinitely
        {
            Console.WriteLine("Enter input:"); // Prompt
            line = Console.ReadLine(); // Get string from user
            numberInBin = BigInteger.Parse(line);
            if (line == "exit") // Check string
            {
                 break;
            }
            int bitPos = 0;
            while (bitPos < line.Length )
            {
                 bitValue = numberInBin % 10;
                 numberInBin = numberInBin / 10;
                 numberInDec = numberInDec + bitValue * ((BigInteger)Math.Pow(2,bitPos));
                 bitPos ++;
            }
            Console.WriteLine(numberInDec);
            numberInDec = 0; = 0;
            }
       }
 }

 

/* how to use type BigInteger - here :
*  http://www.introprogramming.info/english-intro-csharp-book/read-online/chapter-6-loops/

 

Просто се поразрових из интернет за да видя как се чете стринг от линията до края на стринга и как се взима дължината му.

 

 

3
ViValDam avatar ViValDam 15 Точки
!!!! Наков иска до ползваме цикли и сами да конвертираме числата , а не да използваме вградени в C# функции ! Резултата трябва да е от тип BigInteger. Този тип е описан подробно в книгата му, в раздел "Цикли".
2
HPetrov avatar HPetrov 822 Точки

Както виждаш решението му е с цикъл а не директно конвертиране. Резултата е от тип какъвто си избереш. BigInt се използва за случаи когато числото ти е прекалено голямо да се побере в който и да е друг тип. За такава задача long ти върши чудесна работа - малък е шанса някои да си играе да въвежда по дълъг стринг от битове от 64 символа, че да препълни long. Също така BigInt e супер бавен.

3
Nicky89 avatar Nicky89 15 Точки

Проблема ми е решен, оправих го, мисля че спазвам всички условия на задачата. Няма нужда от допълнителен СПАМ.

Мерси на всички за помоща.

-1
ViValDam avatar ViValDam 15 Точки
Ето какво пише в моето условие на 13 задача - не знам вашите защо са различни ! /* Problem 13. Binary to Decimal Number Using loops write a program that converts a binary integer number to its decimal form. The input is entered as string. The output should be a variable of type BigInteger. Do not use the built-in .NET functionality. Examples: binary decimal 0 0 11 3 1010101010101011 43691 1110000110000101100101000000 236476736 */
2
ViValDam avatar ViValDam 15 Точки

Eто още по-просто написано моето решение :

 

 

using System;

using System.Numerics;

class BinaryToDecimal

{

      static void Main()

      {

          string text = Console.ReadLine();

          BigInteger numberInBinary =   BigInteger .Parse(text);

          BigInteger lastBitValue = 0;

          BigInteger numberInDecimal = 0;

          for (int bitPos = 0; bitPos < text.Length; bitPos++)
          {
               lastBitValue = numberInBinary % 10;
               numberInBinary = numberInBinary / 10;
               numberInDecimal = numberInDecimal + lastBitValue * (BigInteger) Math.Pow(2, bitPos);
           }
           Console.WriteLine(numberInDecimal);
       }
}

 

// Ето какво пише в моето условие на 13 задача.

Аз имам навик ,преди да почна задачата, да си копирам условието в проекта .

Интересно обаче - сега някой го е подменил това условие !!!

/* Problem 13. Binary to Decimal Number
Using loops write a program that converts a binary integer number to its decimal form.
The input is entered as string.
The output should be a variable of type BigInteger.
Do not use the built-in .NET functionality.
Examples:
 binary                                         decimal
 0                                                  0
 11                                                 3
 1010101010101011                            43691    
 1110000110000101100101000000            236476736
*/

 Повече няма до пиша в тази тема , щом въпреки ,че пиша по темата , съм смятана за спамаджийка  - ха ха ха smile

 

Както казва ,старата българска поговорка - направи добро за да изядеш лай.о !

4
ScreeM avatar ScreeM 19 Точки

Ето моите 2 решения на задачата, надявам се, че ще съм полезен: http://pastebin.com/HRBx76yj . Ако имаш въпроси, питай..

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