Grosik za twoje myśli
Mając dodatnią liczbę całkowitą n reprezentującą ilość posiadanych centów, zwróć kwotę w sformatowanej walucie. Na przykład, biorąc pod uwagę n = 123456, zwróć „1234,56".
Przykład 1
Wejście
n = 132
Wyjście
„1.32″Przykład 2
Wejście
n = 2
Wyjście
„0,02″Przykład 3
Wejście
n = 100000000
Wyjście
„1 000 000,00″
Sformatuj numer waluty za pomocą C++
Chociaż to zadanie może wydawać się proste w przypadku wbudowanej funkcji, takiej jak printf lub format String (w Pythonie), zaimplementowanie tego formatowania liczby/waluty nie wydaje się trywialnym zadaniem. Najpierw musielibyśmy uzyskać część groszową (ułamek), obliczając dwie ostatnie cyfry (reszta przez 100). Następnie musimy zgrupować pozostałe cyfry w trzy.
Potrzebujemy funkcji string pad, aby dodać wiodące zera dla środkowych grup, a także grosz (do 2 cyfr, np. 0,01). Najważniejsza grupa nie powinna dodawać wiodących zer. Liczby są oddzielone przecinkiem.
string solve(int n) {
auto pad = [](int v, int d) {
string ans = std::to_string(v);
if (ans.size() < d) {
ans = string(d - (int)ans.size(), '0') + ans;
}
return ans;
};
int cents = n % 100;
n /= 100;
vector<int> groups;
while (n > 0) {
groups.insert(begin(groups), n % 1000);
n /= 1000;
}
string ans = "";
if (!groups.empty()) {
ans += std::to_string(groups[0]);
if (groups.size() > 1) {
ans += ",";
for (int i = 1; i + 1 < groups.size(); ++ i) {
ans += pad(groups[i], 3) + ",";
}
ans += pad(groups.back(), 3);
}
} else {
ans += "0";
}
ans += ".";
ans += pad(cents, 2);
return ans;
}
Powyższa funkcja C++ deklaruje lokalną funkcję lambda przy użyciu składni funkcjonalnej. Następnie grupujemy cyfry w trzy i umieszczamy je w wektorze. Następnie wypełniamy każdą grupę, w tym część pensową.