C# :: Aufgabe #369

2 Lösungen Lösungen öffentlich

Und noch mehr Quersummen

Anfänger - C# von JKooP - 06.03.2021 um 18:04 Uhr
Von einer positiven Integer- Zahl soll solange die Quersumme gebildet werden
bis die Zahl einstellig geworden ist.
Die einstellige Zahl soll als Ergebnis ausgegeben werden.

Beispiel:
739 => 7 + 3 + 9 = 19
19 => 1 + 9 = 10
10 => 1 + 0 = 1

Viel Spaß

Lösungen:

vote_ok
von JKooP (18090 Punkte) - 14.04.2021 um 18:58 Uhr
NET 5.x, C# 9.x; VS-2019
1. Lösung (LINQ)
Quellcode ausblenden C#-Code
using System.Linq;
System.Console.WriteLine(AddDigits(739));
static int AddDigits(int n) => (n.ToString().Length == 1) ? n : AddDigits((int)n.ToString().Select(x => char.GetNumericValue(x)).Sum());

2. Lösung (da hier keine Umwandlung in Strings stattfindet, ist diese Lösung ca. 50x schneller, wobei wir hier von Mikrosekunden sprechen)
Quellcode ausblenden C#-Code
System.Console.WriteLine(AddDigits(739));

static int AddDigits(int n)
{
    if (NumLength(n) == 1) return n;
    var r = 0;
    while (n > 0)
    {
        r += n % 10;
        n /= 10;
    }
    return AddDigits(r);
}

static int NumLength(int n)
{
    var c = 0;
    while (n > 0)
    {
        n /= 10;
        c++;
    }
    return c;
}
vote_ok
von consul56 (50 Punkte) - 03.07.2021 um 21:03 Uhr
Quellcode ausblenden C#-Code
class Program
    {
        static int laufzaehler = 0;
        static void Main(string[] args)
        {
            UInt32 eingabeWert = 0;
            Console.WriteLine("QuersummenBerechnung");
            do {
                Console.WriteLine("Bitte einen Zahlenwert eingeben:");
            }while(!UInt32.TryParse(Console.ReadLine(), out eingabeWert));
            QuerSumme(eingabeWert);
            Console.ReadKey();
        }

        static void QuerSumme(UInt32 w)
        {
            laufzaehler++;
            string ws = w.ToString();
            Int32 ziffer = 0;
            Int32 qs = 0;            
            for (int i=0; i<ws.Length; i++)
            {
                Int32.TryParse(ws[i].ToString(), out ziffer);
                qs += ziffer;
            }
           
            if (qs > 9) QuerSumme((UInt32)qs);
            else
            Console.WriteLine($"Lauf Nr. {laufzaehler}: Quersumme = {qs}");
        }
    }