C# :: Aufgabe #369
2 Lösungen
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ß
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:
NET 5.x, C# 9.x; VS-2019
1. Lösung (LINQ)
C#-Code
2. Lösung (da hier keine Umwandlung in Strings stattfindet, ist diese Lösung ca. 50x schneller, wobei wir hier von Mikrosekunden sprechen)
C#-Code
1. Lösung (LINQ)
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)
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;
}
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}");
}
}