python与c++的除法、求模与求余

一般的除法原则:
负数 ÷ 负数 = 正数
正数 ÷ 正数 = 正数
正数 ÷ 负数 = 负数
负数 ÷ 正数 = 负数
总之:同号相除等于正数,异号相除等于负数。| 商 | = | 被除数 | ÷ | 除数 |

一、C/C++、Java

1、整型(int) / 整型(int) = 整型(int)
规则:向零取整(向0方向取最接近精确值的整数,为负向上取整、为正向下取整)
方法:
(1)做一般的除法运算。
(2)根据商的符号来取整。如果商为正,则总的结果为向下取整;如果商为负,则总的结果为向上取整。

例1:36 / (-10) = -3。解析:36 ÷ (-10) = -3.6。向上取整,结果为 -3。
例2:(-10) / 36 = 0。解析: (-10) ÷ 36 = -0.27778。向上取整,结果为 0。
例3:(-36) / (-10) = 3。解析:(-36) ÷ (-10)= 3.6。向下取整,结果为 3。

发现:正整数 或 负整数依次 除以 正整数10,结果是依次去掉个位组成的数
-387 / 10 = -38
-38 / 10 = -3
-3 / 10 =0

2、浮点型(float) / 整型(int) = 浮点型(float),只要有一个为float或double型,结果也为float或double型

类型转换规则:
低精度 向 高精度转换(自动转换)
高精度 向 低精度转换(强制转换)

例:
(-36) / (-5.0) = 7.2 // double型
(-36) / (-2.2) = 16.3636 // double型

3、整型(int) % 整型(int) = 整型(int) ————求余
规则:(1) | 小 | % | 大 | = | 小 |,符号同前; (2) | 大 | % | 小 | = | 余 |,符号同前;(|n|指n的绝对值,求余时参照该公式:余数 = 被除数 - 整除得到的商 * 除数———— (a) % (b) = (a) - (a / b)* (b))

方法:
(1)将两个数看作正整数,做一般的求余运算
(2)在得到余数前面加上与被除数相同的符号

例1:(-36) % (-10) = -6。解析:| -36 | % | -10 | = 36 % 10 = 3…6。因被除数符号为负,故总体结果为 -6。
例2:(-36) % 10 = -6。解析:| -36 | % | 10 | = 36 % 10 = 3…6。因被除数符号为负,故总体结果为 -6。
例3:36 % (-10) = 6。解析:| 36 | % | -10 | = 36 % 10 = 3…6。因被除数符号为正,故总体结果为 6。
例4:36 % 10 = 6。解析:| 36 | % | 10 | = 36 % 10 = 3…6。因被除数符号为正,故总体结果为 6。

二、python

1、整型(int) // 整型(int) = 整型(int)
规则:向负无穷方向舍入(向负无穷方向取最接近精确值的整数,即:一直都是向下取整)
方法:
(1)做一般的除法运算。
(2)总的结果为向下取整。

例1:36 // (-10) = -4。解析:36 ÷ (-10) = -3.6。向下取整,结果为 -4。
例2:(-10) // 36 = -1。解析: (-10) ÷ 36 = -0.27778。向下取整,结果为 -1。
例3:(-36) // (-10) = 3。解析:(-36) ÷ (-10)= 3.6。向下取整,结果为 3。

2、数1 / 数2 = 浮点型(float)
例:
(-36) / (-5.0) = 7.2 // float型
36 / (-2) = -18.0 // float型

3、浮点型(float) // 整型(int) = 浮点型(float),只要有一个为float型,结果也为float型
方法:
(1)做一般的除法运算。
(2)向下取整,再添加小数位.0。

例:
36.2 // (-10) = -4.0。解析:36.2 ÷ (-10)= - 3.62。向下取整并添加小数位.0,结果为 -4.0
36 // (-10.0) = -4.0 。解析:36 ÷ (-10.0)= - 3.6。向下取整并添加小数位.0,结果为 -4.0

4、整型(int) % 整型(int) = 整型(int) ————求模
规则:余数 = 被除数 - 整除得到的商 * 除数———— (a) % (b) = (a) - (a // b)* (b)

方法:
(1)先将两个整数看作是正数,再作一般的除法运算:
1、能整除时,其值为 0
2、不能整除时,其值=除数×(整商+1)-被除数
(2)取与除数相同的符号

例1:(-36) % (-10) = -6。解析:-36 // -10 = 3,-36 % -10 = -36 - 3 * ( -10 ) = -6。
例2:(-36) % 10 = 4。解析:36 // 10 = 3,10*(3+1)- 36 = 4。因除数符号为正,故总体结果为 4。
例3:36 % (-10) = -4。解析:36 // 10 = 3,10*(3+1)- 36 = 4。因除数符号为负,故总体结果为 -4。
例4:36 % 10 = 6。解析:36 % 10 = 3…6。故总体结果为 6。

补:divmod() 函数有2个参数,第一个为除数,第二个为被除数。返回结果也有两个参数,第一个为商,第二个为余数(取模运算得到的)。如 divmod(-36,10) 的结果为 (-4, 4)

取余与取模结论:对于两个数为同号时,取模与取余结果一样。主要区别在于对两个异号的数的处理。
python中的求模%运算作用于两个数(不一定是整型);而C/C++、Java的求余%运算作用于两个整数。

三、编程题

将一个32位的整型反转。注意int型的范围位[-2 ^ 31 , 2 ^ 31 -1 ],如果超出范围,返回0。

#include <bits/stdc++.h>
using namespace std;
// 整数翻转:如-123反转为-321
int main(){
    int x;
    cin >> x;

    int max = pow(2,31)-1;
    int min = -1*pow(2,31);
    if(x > max || x < min)
        return 0;
    long int temp = 0;
    long int res = 0;	// 注意存储反转后的结果类型
    while(x != 0){
        temp = x % 10;
        res =  res * 10 + temp;
        x /= 10;
    }
    
    if(res > max || res < min)
        return 0;
    cout << res << endl;    
}

用例过程详解:
x = -123

temp = -123 % 10 = -3
res = 10 * res + temp = 10 * 0 + (-3) = -3
x = x / 10 = -123 / 10 = -12

temp = -12 % 10 = -2
res = 10 * res + temp = 10 * (-3) + (-2) = -32
x = x / 10 = -12 / 10 = -1

temp = -1 % 10 = -1
res = 10 * res + temp = 10 * (-32) + (-1) = -321
x = x / 10 = -1 / 10 = 0

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值