少儿Python每日一题(2):整数的位数

原题解答

本次的题目如下所示(原题出处:蓝桥杯):

【编程实现】
输入一个正整数,输出这个正整数是一个几位数。
输入描述:输入一个正整数
输出描述:输出这个正整数是一个几位数
【样例输入】
12
【样例输出】
2

方法一(通用解法): 

解决这道题,我们需要了解十进制数的本质。我们使用的十进制数,每个数位上代表10^{n}

如果我们对一个整数进行整除10的操作,每整除一次整数的位数就会减少一位。按照这样的思路,每整除一次就累加1,直到商为0。该方法是计算整数位数的通用方法,适用于任何编程语言。代码如下:

a = int(input())
i = 0
while a > 0:
    a //= 10
    i += 1
print(i)

方法二(Python特有操作):

如果我们将整数看成一个字符串的话,整数的位数相当于字符串的长度。我们可以对整数进行类型转换,使用len()函数求字符串的长度即可。该方法是一种比较讨巧的方法,但是并不适用于所有编程语言。代码如下:

a = int(input())
print(len(str(a)))

本题拓展

该题目主要考查对十进制数本质的了解程度,题目难度:★

除了计算一个数的位数外,我们还经常要得到一个整数各个数位上的数字,题目如下所示:

【编程实现】
输入一个正整数,输出这个正整数各个数位上的数。
输入描述:输入一个正整数
输出描述:输出这个正整数各个数位上的数字,以逗号隔开
【样例输入】
2156
【样例输出】
2,1,5,6

方法一:

 题目的整体思路跟原题区别不大,依然要利用十进制数的本质。增加难度的部分是需要求各个数位上的数字。我们在整除10之前可以先取余数,得到的是最小位上的数。按照次序循环,得到的数字为从最低位数字到最高位的数字,逆序即可得到结果。该思路适用于所有编程语言,也是求各个数位上数字的通用方法。代码如下:

a = int(input())
t = []
while a > 0:
    t.append(a % 10)
    a //= 10
t.reverse()
print(*t, sep=',')

方法二:

如果会充分利用Python的类型转换,会发现要想得到各个数位上的数字非常容易。如果使用字符串类型来表示一个整数,每个字符就是各个数位上的数了。这也是一种比较讨巧的方法,该方法不适用于其他语言。代码如下:

a = int(input())
s = str(a)
print(*s, sep=',')

总结

该类型的题目虽然非常简单,通常出现在竞赛题的第一题,也非常容易得分。但是却是非常重要的基础操作,在一些复杂的问题中,我们经常需要先得到整数的位数、整数各个数位上的数字,才能进行下一步的操作,如水仙花数等问题。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凤城老人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值