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

#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ß
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

von JKooP (18090 Punkte)
- 24.05.2021 um 20:39 Uhr
C++ 17
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
Seite 1 von 0
1