C# :: Aufgabe #358
5 Lösungen

Divisionsrest (Modulo) aus einer Zahl und ihrer Ziffern
Anfänger - C#
von JKooP
- 11.02.2021 um 19:17 Uhr
Ziel soll es sein, eine beliebige Integer-Zahl dahingehend zu überprüfen,
ob die Zahl dividiert durch jede ihrer Ziffern immer den Rest 0 ergibt (Modulo = mod).
Dazu soll eine Methode/Funktion erstellt werden, die zwei Integer-Zahlen (Min, Max) aufnimmt
und alle Lösungen im angegebenen Bereich (Min-Max) als Integer-Array zurückgibt.
Beispiel:
Min = 1
Max = 20
Lösung: = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15 ]
Erläuterung (Auszug):
Zahl 9: 9 mod 9 = 0 => true (gilt für jede einstellige Zahl)
Zahl 10: 10 mod 1 = 0; 10 mod 0 = 10 => false, da nicht beide den Rest 0 haben
Zahl 12: 12 mod 1 = 0; 12 mod 2 = 0 => true
Zahl 14: 14 mod 1 = 0; 14 mod 4 = 2 => false, da nicht beide den Rest 0 haben
Viel Spaß
ob die Zahl dividiert durch jede ihrer Ziffern immer den Rest 0 ergibt (Modulo = mod).
Dazu soll eine Methode/Funktion erstellt werden, die zwei Integer-Zahlen (Min, Max) aufnimmt
und alle Lösungen im angegebenen Bereich (Min-Max) als Integer-Array zurückgibt.
Beispiel:
Min = 1
Max = 20
Lösung: = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15 ]
Erläuterung (Auszug):
Zahl 9: 9 mod 9 = 0 => true (gilt für jede einstellige Zahl)
Zahl 10: 10 mod 1 = 0; 10 mod 0 = 10 => false, da nicht beide den Rest 0 haben
Zahl 12: 12 mod 1 = 0; 12 mod 2 = 0 => true
Zahl 14: 14 mod 1 = 0; 14 mod 4 = 2 => false, da nicht beide den Rest 0 haben
Viel Spaß
Lösungen:

using static System.Console; //.net 5.0.2 VS Community 2019 int imin = 1, imax = 301; WriteLine(aufgabe_358(imin, imax).ToMyString()); ReadKey(); //------------------------------------------------------------------------------ int[] aufgabe_358(int imin, int imax) { var temp = new System.Collections.Generic.List<int>(); for (var i = imin; i <= imax; i++) { var ii = i; var bo = true; do { var mo = ii % 10; if (Mod(i, mo) != 0) bo = false; ii /= 10; } while (ii != 0); if (bo) temp.Add(i); } return temp.ToArray(); } int Mod(int z1, int z2) => z2 != 0 ? z1 % z2 : z1; static class Extension { public static string ToMyString(this int[] X) { var sb = new System.Text.StringBuilder(); foreach (int x in X) sb.Append($"{x} "); return sb.ToString(); } }

using System; using System.Collections.Generic; namespace TJP358_Divisionsrest { class Program { /// <summary> /// Main /// </summary> static void Main(string[] args) { // Prüfung var arrayValues = Calculate(1, 100); // Ausgabe foreach (var item in arrayValues) { Console.WriteLine(item); } } /// <summary> /// Prüfen der Zahlenwerte /// </summary> private static int[] Calculate(int min, int max) { List<int> listResults = new List<int>(); // alle Zahlenwerte prüfen for (int j = min; j <= max; j++) { string value = j.ToString(); List<int> listDigits = new List<int>(); // Ziffern der Zahl ermitteln for (int i = 0; i < value.Length; i++) { if (int.TryParse(value[i].ToString(), out int result)) listDigits.Add(result); } // Zahl überprüfen // ok = true wenn Zahl % Ziffer = 0 bool ok = true; foreach (var digit in listDigits) { if (digit == 0 || (j % digit) != 0) ok = false; } if (ok) listResults.Add(j); } return listResults.ToArray(); } } }

using System; using System.Text; namespace DivisionstestModulo { class Program { static void Main(string[] args) { int minValue = 1; int maxValue = 20; StringBuilder sb = new StringBuilder(); for (int i = minValue; i <= maxValue; i++) { bool isModuloZero = false; char[] digits = i.ToString().ToCharArray(); foreach (char diget in digits) { double nDiget = Char.GetNumericValue(diget); if (nDiget == 0) { isModuloZero = false; break; } double diff = i / nDiget; double rest = diff - Math.Truncate(diff); if (rest == 0) isModuloZero = true; else { isModuloZero = false; break; } } if (isModuloZero) sb.Append($"{i}, "); } Console.WriteLine(sb); } } }
NET 5.x; C# 9.x; VS-2019
C#-Code

using System.Collections.Generic; using System.Linq; const int min = 1, max = 100; System.Console.WriteLine(string.Join(", ", SelfDividingNumbers(min, max))); IEnumerable<int> SelfDividingNumbers(int min, int max) { foreach (var l in Enumerable.Range(min, max - min + 1)) if (l.ToString().All(x => l % char.GetNumericValue(x) == 0)) yield return l; }
NET 5.x; C# 9.x; VS-2019
C#-Code

using System.Collections.Generic; const int min = 1, max = 100; System.Console.WriteLine(string.Join(", ", SelfDividingNumbers(min, max))); IEnumerable<int> SelfDividingNumbers(int min, int max) { for (var n = min; n <= max; n++) { var m = n; var b = true; while (m > 0) { var t = m % 10; if (t == 0 || n % t != 0) { b = false; break; } m /= 10; } if (b) yield return n; } }