std::div în C++

Calculează într-un singur apel câtul și restul împărțirii a două numere întregi.

Sintaxă
std::div_t div(int x, int y);
std::ldiv_t div(long x, long y);
std::lldiv_t div(long long x, long long y);

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.