Ce face std::div
std::div(x, y) returnează o structură cu două câmpuri: quot (câtul, x / y) și rem (restul, x % y). Câtul este trunchiat spre zero, ca la operatorul /.
Astăzi compilatoarele calculează oricum câtul și restul împreună când scrii x / y și x % y unul lângă altul, deci std::div este mai degrabă o chestiune de stil.
Parametri
| Parametru | Descriere |
|---|---|
x |
Deîmpărțitul. |
y |
Împărțitorul (diferit de 0). |
Ce returnează
div_t (sau ldiv_t, lldiv_t) cu câmpurile quot și rem.
Exemple
Exemplul 1: Minute transformate în ore și minute
#include <cstdlib>
#include <print>
int main() {
int durata = 137;
std::div_t r = std::div(durata, 60);
std::println("{} minute = {} h {} min", durata, r.quot, r.rem);
}
Rezultat
137 minute = 2 h 17 min
Exemplul 2: Restul cu numere negative și long long
#include <cstdlib>
#include <print>
int main() {
auto r = std::div(-17, 5);
std::println("-17 / 5: cât {}, rest {}", r.quot, r.rem);
std::lldiv_t mare = std::div(10'000'000'000LL, 3LL);
std::println("10 miliarde / 3: cât {}, rest {}", mare.quot, mare.rem);
}
Rezultat
-17 / 5: cât -3, rest -2
10 miliarde / 3: cât 3333333333, rest 1
Greșeli frecvente
- Împarți la 0: comportament nedefinit, la fel ca la
/.
Comenzi înrudite
std::fmod: Calculează restul împărțirii a două numere cu virgulă (echivalentul lui % pentru double).std::gcd: Calculează cel mai mare divizor comun (gcd) și cel mai mic multiplu comun (lcm) a două numere întregi.std::atoi: Transformă un text C în număr întreg (atoi) sau cu virgulă (atof), fără nicio semnalare a erorilor.