C++ :: Aufgabe #345 :: Lösung #1

1 Lösung Lösung öffentlich
#345

Primfaktorzerlegung und Potenzschreibweise

Fortgeschrittener - C++ von JKooP - 03.04.2021 um 09:53 Uhr
1. Schreibe eine Methode/Funktion, die jede Integer- Zahl in ihre Primfaktoren zerlegen kann
und das Ergebnis als Array/Liste zurückgibt.

Beispiel:
24 = 2*2*2*3

Lösung:
a = { 2, 2, 2, 3 }

2. Schreibe eine weitere Methode/Funktion, die die Werte des Arrays aus Aufgabe 1
in Potenzschreibweise überführt und auf dem Bildschirm ausgibt.
Das Zeichen zur Darstellung kann je nach Vorliebe/Programmiersprache variieren (^, **, h, ...).

Lösung:
2*2*2 = 2^3
3 = 3^1

Ausgabe:
2^3 * 3^1

Viel Spaß
#1
vote_ok
von JKooP (18090 Punkte) - 24.05.2021 um 20:39 Uhr
C++ 17
Quellcode ausblenden C-Code
#include <iostream>
#include <vector>
#include <string>
#include <map>
using namespace std;

vector<int> get_prime_factors(int n) {
    vector<int>v;
    auto i{ 2 };
    while (i <= n) {
        if (n % i == 0) {
            n /= i;
            v.push_back(i);
        }
        else
            i++;
    }
    return v;
}

template<typename T>
bool map_contains_key(const map<T, T>& m, const T& compare) {
    for (const auto& k : m)
        if (k.first == compare)
            return true;
    return false;
}

template<typename T>
map<T, int> group_vector(const vector<T>& v) {
    map<T, int>m;
    for (const auto& i : v) {
        if (map_contains_key(m, i))
            m[i]++;
        else
            m.emplace(i, 1);
    }
    return m;
}

void print_primefactors(const vector<int>& v) {
    for (const auto& i : v)
        cout << i << ", ";
    cout << "\n\n";
}

string get_power_notation(const vector<int>& v) {
    string s;
    auto grp{ group_vector(v) };
    for (const auto& i : grp)
        s += to_string(i.first) + "^" + to_string(i.second) + " * ";
    s = s.substr(0, s.length() - 3);
    return s;
}

int main()
{
    auto pf{ get_prime_factors(168) };
    print_primefactors(pf);
    cout << get_power_notation(pf) << "\n";
}

Kommentare:

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

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