原题解答
本次的题目如下所示(原题出处:蓝桥杯):
【编程实现】
输入一个正整数,输出这个正整数是一个几位数。
输入描述:输入一个正整数
输出描述:输出这个正整数是一个几位数
【样例输入】
12
【样例输出】
2
方法一(通用解法):
解决这道题,我们需要了解十进制数的本质。我们使用的十进制数,每个数位上代表。
如果我们对一个整数进行整除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=',')
总结
该类型的题目虽然非常简单,通常出现在竞赛题的第一题,也非常容易得分。但是却是非常重要的基础操作,在一些复杂的问题中,我们经常需要先得到整数的位数、整数各个数位上的数字,才能进行下一步的操作,如水仙花数等问题。