带余除法c++语言,C++中取余运算的实现

一、C++中的整数除法

C++中整数除法和取余用的是truncate除法(舍0取整),而给无符号类型赋值超出表示范围时候用无符号类型等于赋值对无符号类型可以表示的数值总数取余,智力的取余是基于floor除法的(向下取整)。

在整数除法中,Java/C 等语言用的是 truncate 除法,Python 用的是 floor 除法。

1、truncate 除法

向零取整。向 0 方向取最接近精确值的整数,换言之就是舍去小数部分,因此又称截断取整(Truncate)。可以这样理解,先用浮点数除法进行计算,计算结果直接舍去小数部分。

如:

5/-2=-2.5,所以整数除法中5/(-2)=-2

-5/2=-2.5,所以整数除法中-5/2=-2

-5/-2=2.5,所以整数除法中-5/-2=2

5/2=2.5,所以整数除法中5/2=0

2、C++中取余

有上述除法,我们已知a/b=c,而取余操作时a%b=d

那么d的求解方法如下:

d=a-(bc)

5%2=5-(22)=1

(-5)%(-2)=(-5)-((-2)2)=-1

5%(-2)=5-((-2)(-2))=1

(-5)%2=(-5)-(2*(-2))=-1

最后两个式子尤其值得注意

3、floor 除法

理解起来就是向下取整

5/-2=-2.5,所以floor除法中5/(-2)=-3

-5/2=-2.5,所以floor除法中-5/2=-3

-5/-2=2.5,所以floor除法中-5/-2=2

5/2=2.5,所以floor除法中5/2=2

4、C++中无符号变量被赋值超出他表示范围的情况

如我们给定unsigned char a;取值范围为0-255共256个数值,则

a = 5 输出为5 理解为 5-0256

a=257 输出为1 理解为 257-1256

a=-5 输出为251 理解为-5 - (-1256)

a=-257 输出为255 理解为 -257 - (-2256)

到此这篇关于C++中取余运算的实现的文章就介绍到这了,更多相关C++ 取余运算内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果有理函数更为复杂,需要进行除法运算,可以使用C++的多项式类来表示有理函数,并使用多项式除法实现除法C++没有内置的多项式类,但可以通过自定义多项式类来实现该功能。下面是一个简单的示例,演示如何使用多项式类进行除法运算: ```cpp #include <iostream> #include <vector> // 多项式类定义 class Polynomial { private: std::vector<double> coefficients; // 多项式系数 public: Polynomial(const std::vector<double>& coeffs) : coefficients(coeffs) {} // 多项式除法函数 Polynomial operator/(const Polynomial& divisor) const { std::vector<double> quotientCoeffs; std::vector<double> remainderCoeffs(coefficients); // 初始化余项为被除多项式 while (remainderCoeffs.size() >= divisor.coefficients.size()) { double leadingTerm = remainderCoeffs.back() / divisor.coefficients.back(); quotientCoeffs.push_back(leadingTerm); for (int i = 0; i < divisor.coefficients.size(); i++) { remainderCoeffs[remainderCoeffs.size() - i - 1] -= leadingTerm * divisor.coefficients[divisor.coefficients.size() - i - 1]; } // 去除余项的前导零 while (!remainderCoeffs.empty() && remainderCoeffs.back() == 0) { remainderCoeffs.pop_back(); } } return Polynomial(quotientCoeffs); } // 打印多项式 void print() const { for (int i = coefficients.size() - 1; i >= 0; i--) { std::cout << coefficients[i] << "x^" << i; if (i > 0) { std::cout << " + "; } } std::cout << std::endl; } }; int main() { // 创建被除多项式和除数多项式 Polynomial numerator({ 1, 0, -3, 2 }); // 1x^3 - 3x^2 + 2 Polynomial divisor({ 1, -1 }); // x - 1 // 进行除法运算 Polynomial quotient = numerator / divisor; // 输出结果 cout << "Quotient: "; quotient.print(); return 0; } ``` 在上述示例,我们自定义了一个多项式类`Polynomial`,通过向构造函数传递系数的向量来初始化多项式。然后,我们重载了除法运算符,在`operator/`函数实现了多项式的除法运算。主函数创建了被除多项式和除数多项式,并调用`/`运算符进行除法运算,得到商多项式`quotient`。最后,通过调用`print()`函数打印结果。 请注意,这只是一个简单的示例,用于演示如何使用多项式类进行除法运算。对于更复杂的有理函数,可能需要更复杂的数据结构和算法来表示和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值