PAT_乙级_1021,python中 / 与 //

Python中的除法

  • 第一种是:/ ,普通的除法。
  • 第二种是:// ,官方称为地板除(floor division),得到的结果永远是整数。

对于除法,官方的解释是这样的:

Division (/) always returns a float. To do floor division and get an integer result (discarding any fractional result) you can use the // operator; to calculate the remainder you can use %.

我们大概了解了除法( ̄︶ ̄)↗ ,而在PAT乙级1021题——个位数统计中,我们需要用到 **//**来操作,不然会出现返回非零的情况。

那么对于这道题:

输入格式:
每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。
输出格式:
对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。

因为是个位数字统计,所以总是逃不开只统计0-9就可以了。鄙人直接想到的就是用字典
至于取数,我们也再熟悉不过了,除10取余就可以了。

一切看似容易,但是问题就在除法这里了。题目给出的是1000位的正整数,我们需要注意的是,python中的除法有些特殊。

举例说明:

number = int(input())
nums = [i for i in range(10)]
times = [0]*10
lis = dict(zip(nums, times))
while number!=0 :
    lis[number%10] += 1
    number = number // 10 
    # 1.number = number / 10  
    # 在1.中,直接除结果存在小数所以导致keyerror(字典key无小数)。
    # 2.number = int(number / 10) 
    # 在2.中,当number为999999999999999999209)时,就会出问题。
for k,v in lis.items():
    if v!=0:
        print('{0}:{1}'.format(k, v))

代码第一行得到输入,并强制转换为int型(因为题目说输入是正整数)。
代码第二至四行创建字典,key为[0-9],value初始化为0。
代码五至七行统计个位数。
代码八至十行按格式输出。

注释2.中,我们发现当输入为99999999999999999999(20个9)时,
int(number / 10)会得到10000000000000000000(19个0)的结果,
本人猜测是因为,20个9在二进制计算当中已经十分十分十分接近100000000000000000000(1后20个0)了,所以得到的结果就是这样的。

然而地板除,把近似的情况删掉了,所以就能得到期望的结果。

emm,还望高手指点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值