[Домашно] Loops - Problem 13.Binary to Decimal Number
Здравейте,
Имам следния проблем и не мога да разбера защо се получава така, вече няколко часа се мъча! Смята вярно за 1-ци нещо 0-та не ми я приемa. Ето го и решенито !
Здравейте,
Имам следния проблем и не мога да разбера защо се получава така, вече няколко часа се мъча! Смята вярно за 1-ци нещо 0-та не ми я приемa. Ето го и решенито !
Предлагам ти друг алгоритъм :
Прочети инпута и го Parse в лонг
След това при всяко завъртане на цикъла, отделяй с деление на % последната цифра от полученият лонг (0 или 1)
На първото завъртане на цикъла , отделената последна цифра (която е стойността на бита в позиция 0) умножаваш по 2**0
на второто завъртане ,отделената последна цифра ( която е стойността на бита от позиция 1) умножаваш по 2 **1
на третото завъртане, отделената последна цифра ( която е стойността на бита от позиция 2 ) умножаваш по 2 **2
и т.н. до края на числото
Едновременно с това сумираш, стойностите при всяко завъртане , като крайната сума е числото представено в десетична бройна система.
Не съм стигнала до тази задача още, но ей сега ще се опитам да я направя и ще я пусна .
Проблема ти идва от това, че четеш битовете от ляво на дясно, а трябва от дясно на ляво. Foreach цикъла не мисля, че е много подходящ като цяло за целта, но като смяташ трябва от най-десния char към най-левия. При "1001" дава правилно "9" но при "1000" -> тука вече мисля че знаеш колко ще даде ;) Друг проблем е ако Input-а ти е "001000" -> "4".
Току що го видях и аз това. Мерси все пак за помоща. Мисля, че сега работи ок
Здравей! Според мен, при теб грешката идва от това, че бинарния стринг не е ревърснат, преди цикъла с умножение! От друга страна, мисля че наистина има и по-добри методи за конвертиране на двоично в десетично число - ето един пример: ConvertBinaryToDecimalNumber . Надявам се да съм ти помогнал. Успех със задачите!
Това е точното решение по условието на задачата. Поздравления. Идеята е много добра. :)
Не знам кой си ти " големият умник" ,който слага минуси за хубави идеи ?
Ето това е от мен за теб !
Ето го и решението на задачата, по моята идея:
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/
Просто се поразрових из интернет за да видя как се чете стринг от линията до края на стринга и как се взима дължината му.
Както виждаш решението му е с цикъл а не директно конвертиране. Резултата е от тип какъвто си избереш. BigInt се използва за случаи когато числото ти е прекалено голямо да се побере в който и да е друг тип. За такава задача long ти върши чудесна работа - малък е шанса някои да си играе да въвежда по дълъг стринг от битове от 64 символа, че да препълни long. Също така BigInt e супер бавен.
Проблема ми е решен, оправих го, мисля че спазвам всички условия на задачата. Няма нужда от допълнителен СПАМ.
Мерси на всички за помоща.
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
*/
Повече няма до пиша в тази тема , щом въпреки ,че пиша по темата , съм смятана за спамаджийка - ха ха ха
Както казва ,старата българска поговорка - направи добро за да изядеш лай.о !
Ето моите 2 решения на задачата, надявам се, че ще съм полезен: http://pastebin.com/HRBx76yj . Ако имаш въпроси, питай..
Алгоритъма ми е ясен, въпроса е моето решение някъде се "прецаква".