C# :: Aufgabe #189 :: Lösung #1

9 Lösungen Lösungen öffentlich
#189

Zahlen umwandeln: Binär zu Dezimal

Anfänger - C# von Nachbar - 13.09.2017 um 14:19 Uhr
Schreibe eine Funktion, die Zahlen aus dem Dualsystem in Zahlen des Dezimalsystems umwandelt.

Beispiel:

Binär: 11010
Dezimal: 26
#1
vote_ok
von hollst (13980 Punkte) - 15.09.2017 um 11:07 Uhr
Quellcode ausblenden C#-Code
using System;
using static System.Console;

namespace aufgabe_189   {

    class Program    {

        static void Main()        {
            bool bo_run_again = true;
            do            {
                string input = string.Empty;
                bool bo_input_ok = false;
                while (!bo_input_ok)                {
                    input = "Give me an Integer in Binary Representation (eg. 100110): ".LineInfo();
                    if (!(bo_input_ok = input.Bo_Check_Binarity() && input.Length != 0))
                        "wrong input".MessageLine();
                }
                (input.CutLeadingZeros() + " (BIN) = " + input.BinToUInt64().ToString() + " (DEZ)").MessageLine();
                bo_run_again = !(("press ENTER for repeat or ESC for exit" + Environment.NewLine).KeyInfo().Key == ConsoleKey.Escape);
            } while (bo_run_again);
        }
    }

    public static class BinToDec    {

        public static void MessageLine(this string s) => WriteLine(s);

        public static void Message(this string s) => Write(s);

        public static ConsoleKeyInfo KeyInfo(this string s)        {
            s.Message(); return ReadKey(true);
        }

        public static string LineInfo(this string s)        {
            s.Message(); return ReadLine();
        }

        public static bool Bo_Check_Binarity(this string s)        {
            Char[] c = s.ToCharArray();
            foreach (Char cc in c)
                if (!((cc == '0') || (cc == '1')))
                    return false;
            return true;
        }

        public static string CutLeadingZeros(this string s)        {
            String erg = String.Empty;
            bool bo_leading_zeros = true;
            for (var i = 0; i < s.Length; i++)            {
                if (bo_leading_zeros)
                    bo_leading_zeros = s[i] == '0';
                if (!bo_leading_zeros)
                    erg += s[i].ToString();
            }
            return erg;
        }

        public static ulong BinToUInt64(this string s)        {
            Char[] c = s.CutLeadingZeros().ToCharArray();
            ulong pow = 1, erg = 0;
            for(var i = 0; i < c.Length; i++)            {
                erg += pow * ulong.Parse(c[c.Length - 1 - i].ToString());
                pow *= 2;
            }
            return erg;
        }
    }
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben