C# Advanced 04.Numeral Systems Homeworks


1

Здравейте колеги,

Тъй-като не видях тема за домашните от лекцията за бройни системи реших аз да я отворя като кача моите решения на задачите тук




Отговори



5
Tip: Не разчитайте на Math.Pow за задача 7, ако искате да надскочите 85/100. 
Или: "Как да не се циклите няколко часа и да сътворите 15-тина "грешни" опита в bgcoder" :D 
Не виждам смисъл да поствам решения. До голяма степен са ясни на всеки, който е гледал лекцията малко по-внимателно.
Enjoy! 

от StoikoNeykov (2621 точки)


5
Math.Pow е неточна за цели числа, понеже използва приближения. Когато искаме точно степенуване на цели числа - пишем си едно методче :)

Като цяло има по-елегантни начини, без да изчислявате степени. Вижте си демата :)

от kon.simeonov (5238 точки)

1
Сега видях, че твоето видео е качено (аз гледах видео от минали години). Сега с "тенировката" над домашните и като гледам новото видео, ще се изчистят нещата. Колкото до демата - хвърлих един поглед и има интересни неща. Но ще гледам по детайлно с видеото.
Но това цялото утре - като приключа с домашната по CSS няма да имам нерви за нищо :D 

от StoikoNeykov (2621 точки)



4

Споделям моето решение на задача 7. Надявам се да е полезно за някого.

http://pastebin.com/E7kMrBTm


от Pepi.Ka (922 точки)


0
Беше доста полезно. Благодаря.

от nerazzul (325 точки)


0
Някой може ли да ми каже защо кода ми давада 65% и грешка при изпълнението на другите тестове ?

от Doubleshot (429 точки)


2

Грешката ти е в ред 66:

Console.WriteLine(BigInteger.Parse(NToD(NToDec(N, s), d)));

Напиши го без да парсваш към BigInteger:

Console.WriteLine(NToD(NToDec(N, s), d));

и ще работи при всички тестове ;)


от Pepi.Ka (922 точки)

0
Мерси. Аз го бях парснал в 5-та задача линк за да махна излишните нули и не знам защо и в тази съм го праснал като няма нужда :D

от Doubleshot (429 точки)


2

Ето ги и моите

Най-важното в тези задачи е може би урока по Math.Pow();


от todorovh (2055 точки)


1
Ето го и моето домашно

от Alex_St (25 точки)


0

Изкарвам 45/100 точки с моя код, пък аз като си го тествам работи с каквито и колкото и големи стойности да му подам. Сравнявах си резултатите с Windows-кия Calculator и винаги кода ми изкарваше същия резултат.

using System; namespace BinaryToDecimal { class BinaryToDecimal { static void Main() { char[] input = Console.ReadLine().ToCharArray(); int arrLenght = input.Length; double dec = 0; BinToDec(input, arrLenght, dec); } static void BinToDec(char[] input, int arrLenght, double dec) { Array.Reverse(input); for (int i = arrLenght - 1; i >= 0; i--) { dec += (input[i] - '0') * (Math.Pow(2, i)); } Console.WriteLine(dec); } } }


от olebg (598 точки)


1
Използвай BigInteger и вместо Math.Pow използвай степента за големи числа - BigInteger.Pow

от georgivelikov (1844 точки)

0
Благодаря!

от olebg (598 точки)


0

Здравейте,

Решавах си аз тази задача и стигнах до това решение. Проблема на това решение, е че изписва незначещите нули след MSB. Някакви предложения как да ги махна?


от mojojojo (207 точки)


0
Може да ги изрежеш от стринга със String.TrimStart метода.


0
Мерси, точно това ми трябваше!

от mojojojo (207 точки)


0

Идея къде бъркам в 7ма задача за последните 25 точки? 


от SexPistols (786 точки)


0
Аз я реших с два Dictionary, които Коцето показа на лекция. Ето моето решение.

от Slavka74 (436 точки)

1

На 41 ред: if (n[n.Length - 1 - i] < 57) промени < на <= и си на 100 т

В момента не хващаш 9-ката в тази проверка за цифра


от stoianpp (415 точки)


1

Здравейте, много се измъчих със седма задача"One system tо any other". BGCoder ми даваше 85/100 точки.

Благодарение на коментарите в темата разбрах къде ми е грешката (Math.Pow()). Лично на мен форумът ми е много полезен, за което голямо благодаря на всички, които споделяте.

Ето го и моето решение на седма задача:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Numerics; class OneSystemToAnyOther { static void Main() { int baseS = int.Parse(Console.ReadLine()); string number = Console.ReadLine(); int baseD = int.Parse(Console.ReadLine()); Console.WriteLine(ConvertDecimalToBase(ConvertBaseToDecimal(number, baseS), baseD)); } static long ConvertBaseToDecimal(string number, int numeralSystem) { long decimalNumber = 0; for (int i = 0; i < number.Length; i++) { int digit = 0; if (number[i] >= '0' && number[i] <= '9') { digit = number[i] - '0'; } else // (number[i] >= 'A' && number[i] <= 'Z') { digit = number[i] - 'A' + 10; } // POSITION = hex.Length - i - 1 // math.pow(osnovata na sistemata na stepen poziciqta) decimalNumber += digit * (long)BigInteger.Pow(numeralSystem, number.Length - i - 1); } return decimalNumber; } static string ConvertDecimalToBase(long decimalNumber, int numeralSystem) { string result = ""; while (decimalNumber > 0) { long digit = decimalNumber % numeralSystem; if (digit >= 0 && digit <= 9) { result = (char)(digit + '0') + result; } else // vsqka ot 'A' do 'Z' { result = (char)((digit - 10) + 'A') + result; } decimalNumber /= numeralSystem; } return result; } }




2
Ето ви метод за повдигане на степен... каширайте си го за изпита 

private static long Pow(int a, int b)
    {
        long result = 1;
        for (int i = 0; i < b; i++)
        {
            result *= a;
        }

        return result;
    }

от kiko81 (1655 точки)