淡泊明志 宁静致远
分类: C/C++
2006-12-27 15:33:39
【C语言库函数源代码】
【本程序在Dev C++ 4.9.9.2 下编译通过】
/*
对两个长整型数相除,返回类型为ldiv_t,
在stdlib.h头文件中定义。
typedef struct
{
long quot;
long rem;
} ldiv_t;
quot存储的是商(quotient)。
rem 存储的是余数(remainder)。
算法和div()函数非常类似。
*/
typedef struct
{
long quot;
long rem;
} ldiv_t;
ldiv_t
my_ldiv(long num, long
denom)
{
ldiv_t r;
r.quot = num / denom;
r.rem = num % denom;
/*
在我们普通PC(Intel架构系列的CPU)上
可以正常运行。但是我们不知道其他的机器
是怎么来处理整除和取余运算的,所以还是
要写出来错误处理代码。
被除数为正,余数为负,商加1,余数减除数。
被除数为负,余数为正,商减1,余数加除数。
*/
if (num >=
0 && r.rem < 0)
{
++r.quot;
r.rem -= denom;
}
else if (num < 0 && r.rem > 0)
{
--r.quot;
r.rem += denom;
}
return (r);
}
int main()
{
ldiv_t t;
t = my_ldiv(200,-300000000);
printf("Quotient = %d\tRemainder =
%d\n",t.quot,t.rem);
system("pause");
return 0;
}