给定一个分子和分母,我们必须在不使用模或除运算符的情况下找到它们的商和余数。 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等的更多准备工作,请参阅“完整面试准备课程” 。