📜  C++中的div()函数

📅  最后修改于: 2021-05-30 08:20:10             🧑  作者: Mango

给定一个分子和分母,我们必须在不使用模或除运算符的情况下找到它们的商和余数。 div()函数使我们能够轻松高效地完成相同的任务。
div()函数:以div_t,ldiv_t或lldiv_t类型的结构返回numer除以numer的整数商和余数(numer / denom),该结构具有两个成员:quot和rem。
句法:

div_t div(int numerator, int denominator);
ldiv_t div(long numerator, long denominator);
lldiv_t div(long long numerator, long long denominator);

当我们使用div()函数,它返回一个包含商和参数余数的结构。 div()函数传递的第一个参数用作分子,第二个参数用作分母。
对于int值,返回的结构为div_t。该结构如下所示:

C++
typedef struct
    {
    int quot; /* Quotient.  */
    int rem; /* Remainder.  */
} div_t;


C++
ldiv_t:
struct ldiv_t {
    long quot;
    long rem;
};
 
lldiv_t:
struct lldiv_t {
    long long quot;
    long long rem;
};


CPP
// CPP program to illustrate
// div() function
#include 
#include 
using namespace std;
 
int main()
{
    div_t result1 = div(100, 6);
 
    cout << "Quotient of 100/6 = " <<
                      result1.quot << endl;
    cout << "Remainder of 100/6 = " <<
                       result1.rem << endl;
 
    ldiv_t result2 = div(19237012L,251L);
 
    cout << "Quotient of 19237012L/251L = " <<
                          result2.quot << endl;
    cout << "Remainder of 19237012L/251L = " <<
                            result2.rem << endl;
 
    return 0;
}


类似地,对于长值,返回结构ldiv_t,对于长长值,返回结构lldiv_t。

C++

ldiv_t:
struct ldiv_t {
    long quot;
    long rem;
};
 
lldiv_t:
struct lldiv_t {
    long long quot;
    long long rem;
};

在哪里有用?

问题是,由于我们同时具有%和/运算符,为什么还要使用div()函数?好吧,在一个同时需要商和余数的程序中,使用div()函数将是最好的选择,因为它一次为您计算两个值,而且与使用%和/函数相比,它需要的时间更少一个。
当使用div()函数, %运算符和使用div()都将返回相同的余数值,即,如果我们通过使用%运算符得到的余数为负值,那么我们将使用div()函数得到的余数为负值也。例如,div(-40,3)将给出’-1’的余数。 。因此,可以根据需要有效地使用div()函数。
分母为0时会发生什么?

如果此函数的任何一部分(即余数或商)无法表示或找不到结果,则整个结构将显示未定义的行为
注意:使用div()函数,请记住在程序中包含cstdlib.h库。
例子:

Input : div(40, 5)
Output :quot = 8 rem = 0

Input :div(53, 8)
Output :quot = 6 rem = 5

Input : div(-40,3)
Output : quot = -13 , rem = -1

执行:

CPP

// CPP program to illustrate
// div() function
#include 
#include 
using namespace std;
 
int main()
{
    div_t result1 = div(100, 6);
 
    cout << "Quotient of 100/6 = " <<
                      result1.quot << endl;
    cout << "Remainder of 100/6 = " <<
                       result1.rem << endl;
 
    ldiv_t result2 = div(19237012L,251L);
 
    cout << "Quotient of 19237012L/251L = " <<
                          result2.quot << endl;
    cout << "Remainder of 19237012L/251L = " <<
                            result2.rem << endl;
 
    return 0;
}

输出:

Quotient of 100/6 = 16
Remainder of 100/6 = 4
Quotient of 19237012L/251L = 76641
Remainder of 19237012L/251L = 121
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”