Penniä ajatuksistasi
Jos sinulla on positiivinen kokonaisluku n, joka edustaa senttimäärää, palauta muotoiltu valuuttasumma. Jos esimerkiksi n = 123456, palauttaa "1 234,56".
Esimerkki 1
Tulo
n = 132
Lähtö
"1.32"Esimerkki 2
Tulo
n = 2
Lähtö
"0.02"Esimerkki 3
Tulo
n = 100000000
Lähtö
"1 000 000.00"
Muotoile valuuttanumero C++:lla
Vaikka tämä tehtävä saattaa vaikuttaa yksinkertaiselta sisäänrakennetun funktion, kuten printf tai String-muodon (Pythonissa) kanssa, tämän numeron/valuutan muotoilun toteuttaminen ei vaikuta trivaalilta tehtävältä. Ensin meidän pitäisi saada pennin osuus (murto-osa) laskemalla kaksi viimeistä numeroa (jäljellä 100). Sitten meidän on ryhmiteltävä muut numerot kolmeen.
Tarvitsemme merkkijonotyynytoiminnon lisätäksemme keskimmäisten ryhmien etunollat ja myös pennin (enintään 2 numeroa, kuten 0,01). Merkittävimmän ryhmän ei pitäisi lisätä etunollia. Numerot erotetaan toisistaan pilkulla.
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;
}
Yllä oleva C++-funktio ilmoittaa paikallisen lambda -funktion käyttämällä toiminnallista syntaksia. Sitten ryhmittelemme numerot kolmeen osaan ja laitamme ne vektoriin. Sitten pehmustamme jokaisen ryhmän, mukaan lukien sentin osan.