C# :: Aufgabe #351

3 Lösungen Lösungen öffentlich

Iteriertes Querprodukt

Anfänger - C# von JKooP - 24.01.2021 um 16:44 Uhr
Das Querprodukt einer Zahl ähnelt der Berechnung der Quersumme,
nur dass die Ziffern nicht addiert, sondern miteinander multipliziert werden.

3784 => 3 * 7 * 8 * 4 = 672

Nun soll aus dem Ergebnis wiederum das Querprodukt berechnet werden.

672 => 6 * 7 * 2 = 84

Und immer so weiter, bis nur noch eine Ziffer übrigbleibt.

84 => 8 * 4 = 32
32 => 3 * 2 = 6

Die Ziffer, die am Ende übrigbleibt, nennt man „multiplikative Ziffernwurzel“.
Die Anzahl der Schritte (Iterationen) wird als "Beharrlichkeit" bezeichnet.

Schreibe ein Programm, mit dem es möglich ist, sowohl die Beharrlichkeit als auch die multiplikative Ziffernwurzel einer beliebigen Integer- Zahl auszugeben.

Eine ausführliche Beschreibung findet man hier.

Viel Spaß

Lösungen:

vote_ok
von Waldgeist (2270 Punkte) - 14.02.2021 um 11:00 Uhr
Hallo,

beigefügt meine Lösung. Ich berechne erst die Quersumme und danach das Querprodukt.
Vermutlich ist mein Programm wieder viel zu kompliziert aber immerhin stimmt die Lösung :-)

Quellcode ausblenden C#-Code
using System;

namespace Quersumme_Querprodukt
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Console.WriteLine("Hallo Welt!");
            Console.WriteLine("Hier wird die Quersumme und das Querprodukt berechnet\n\n");
            Console.Write("Bitte geben Sie eine positive Zahl ein: ");

            ulong zahl;
            ulong quersumme;
            ulong querprodukt;

            zahl = Convert.ToUInt64(Console.ReadLine());
            int beharrlichkeit = 0;
            ulong zahlsumme = zahl;
            ulong zahlprodukt = zahl;

            do
            {
                quersumme = Quersumme(zahlsumme);
                Console.Write("Die Zahl: " + zahlsumme + "  ");
                Console.WriteLine("hat die  Quersumme : " + quersumme);
                zahlsumme = quersumme;
            } while (quersumme > 9);

            Console.WriteLine("\n");

            do
            {
                querprodukt = Querprodukt(zahlprodukt);
                Console.Write("Die Zahl: " + zahlprodukt + "  ");
                Console.WriteLine("hat das Querprodukt : " + querprodukt);
                beharrlichkeit++;
                zahlprodukt = querprodukt;
            } while (querprodukt > 9);

            Console.WriteLine($"Damit hat die Zahl " + zahl + " eine Beharrlichkeit von " + beharrlichkeit + " und eine multiplikative Ziffernwurzel von " + querprodukt);

            ulong Quersumme(ulong wert)

            {
                ulong qs = 0;
                while (wert > 0)
                {
                    qs = qs + wert % 10;
                    wert = wert / 10;
                }

                return qs;
            }

            ulong Querprodukt(ulong wert)

            {
                ulong querprodukt = 1;
                while (wert > 0)
                {
                    querprodukt = querprodukt * (wert % 10);
                    wert = wert / 10;
                }

                return querprodukt;
            }
        }
    }
}

vote_ok
von hollst (13340 Punkte) - 15.02.2021 um 17:15 Uhr
Quellcode ausblenden C#-Code
using static System.Console;  //.net 5.0.2 und VS Community 2019

long test = 3784;
WriteLine(querprodukt(test));
WriteLine(beharrlichkeit(test).ToMyString());
ReadKey();

//---------------------------------------------------------------------------------

#region solution aufgabe_351

long querprodukt(long n)    {
    var prod = (long)1;
    do    {
        prod *= n % 10;
        n /= 10;
    } while (n != 0);
    return prod;
}

int[] beharrlichkeit(long n)    {
    var result = new int[2];
    result[0] = 0;      
    while (n > 9)    {
        n = querprodukt(n);
        result[0]++;    //Beharrlichkeit
    }
    result[1] = (int)n; //multiplikative Ziffernwurzel
    return result;
}
#endregion

static class Extension    {
    public static string ToMyString<T>(this T[] X)    {
        var sb = new System.Text.StringBuilder();
        foreach (T x in X)
            sb.Append($"{x} ");
        sb.AppendLine(System.Environment.NewLine + "X.Length: " + X.Length.ToString("n0"));
        return sb.ToString();
    }
}
vote_ok
von JKooP (11680 Punkte) - 05.03.2021 um 16:36 Uhr
NET 5.x; C# 9.x; VS-2019

Quellcode ausblenden C#-Code
const int n = 3784;
var mzw = 0;
var bhk = IterSqrPro(n);

System.Console.WriteLine($"Multiplikative Ziffernwurzel: {mzw}\nBeharrlichkeit: {bhk}");

int IterSqrPro(int n)
{
    if (n.ToString().Length == 1) return n;
    var r = 1;
    while (n > 0)
    {
        r *= n % 10;
        n /= 10;
    }
    mzw++;
    return IterSqrPro(r);
}