pythona除以b四舍五入_Python的除、整除、取余、四舍五入

1. 除 & 四舍五入

除用 / 表示

整数的除会显示一位小数

print(18 / 3)

6.0

出现无法除尽的数或者结果不准确的数,可使用四舍五入的方法进行处理

1.1 round

round的作用是四舍五入以及处理小数点位数

print(round(5.47834))

5 # 不输入参数的情况下默认输出整数

print(10 / 3)

3.3333333333333335 # 无法除尽

print(round(10 / 3, 4)) # 第二个参数的含义是保留的小数点位数

3.3333

1.2 floor

floor的含义为向下取整

print(math.floor(3.99999))

3

print(math.floor(-4.101))

-5

1.3 ceil

ceil则为向上取整

print(math.ceil(9.00001))

10

print(math.ceil(-40.9090909))

-40

2. 整除

经过整除后所得的数为除的结果的向下取整

print(16 / 3)

5.333333333333333

print(16 // 3)

5

print(-23 / 3)

-7.666666666666667

print(-23 // 3)

-8

3.取余

print(23 % 3)

2 # 3 * 7 + 2 = 23

print(-23 % 3)

1 # -8 * 3 + 1 = - 23

由上方结果可得出,无论被除数是正数还是负数,取余操作的结果均为正数

且取余操作的 商 * 被除数 = 小于被除数的最大整数,

例如在上方例子中 小于-23的最大整数为-24,所以商为-8,取余结果为 -23 - (-24) = 1

Leetcode 9. 回文数

根据以上内容,可以完成此题。

思路为以数学的方法反向重构目标数字。

def isPalindrome(self, x: int) -> bool:

if x < 0:

return False

sub = x

ans = 0

while sub != 0:

# rem为10的取余,即当前sub的最后一位数字

rem = sub % 10

# ans为最终反向重构的结果,每次迭代乘10(即进一位),再加上取余的结果rem

ans = ans * 10 + rem

# sub通过整除10的方法,移除最后一位数字

sub = sub // 10

# 比较重构结果ans与输入值x

if ans == x:

return True

else:

return False

Leetcode 8. 字符串转换整数 (atoi)

此题中需要注意的是对32 位有符号整数范围 [−231, 231 − 1]的操作

def myAtoi(self, s: str) -> int:

INT_MAX = 2147483647 # 2^31^ − 1

INT_MIN = -2147483648 # −2^31^

start = 0

ans = 0

flag = 1

n = len(s)

if not s:

return 0

while start < n and s[start] == " ":

start += 1

if start == n:

return 0

if s[start] == "-":

flag = -1

if s[start] == "+" or s[start] == "-":

start += 1

while start < n and s[start].isdigit():

tmp = int(s[start])

# 当前结果ans为正数时,对比ans与INT_MAX整除10的结果

# 若ans > INT_MAX // 10,则当执行ans = ans * 10 + tmp后,ans必定大于INT_MAX

# 同样,如果ans == INT_MAX // 10, 当前遍历到的数字tmp若大于INT_MAX的最后一位7时,ans必定大于INT_MAX

if flag == 1 and (ans > INT_MAX // 10 or (ans == INT_MAX // 10 and tmp > 7)):

return INT_MAX

# 当结果ans符号为负时,对比-ans与INT_MIN // 10 + 1,因为INT_MIN // 10 = -214748365

# 若 -ans < INT_MIN // 10 + 1 (即小于-214748364)时,下次迭代 -ans必定小于INT_MIN

# 同样,如果 -ans == INT_MIN // 10 + 1,tmp大于INT_MIN的最后一位8时,-ans必定小于INT_MIN

if flag == -1 and (-ans < INT_MIN // 10 + 1 or (-ans == INT_MIN // 10 + 1 and tmp > 8)):

return INT_MIN

ans = ans * 10 + tmp

start += 1

return ans * flag

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值