29、题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
?30、题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
? ? ? ? 今天这两个题可以放在一起,首先可以总体进行分析。首先要了解一个数字是如何被拆分的,也就是如何找到一个数字的每一个位数。我们直接从程序开始讲,以五位数为例。个位:数字 s 除以 10 的余数,然后接下来的每一步该数都除以 10 ,保留商,然后再 除以 10 的余数就分别是十位,百位,千位,最后到万位的时候,商就是万位,不需要再 除以 10 求余数了。
29题:
s = int(input('不多于五位的正整数:'))
a = s % 10 #个位
b = int(s / 10) % 10 #十位
c = int(s / 100) % 10 #百位
d = int(s / 1000) % 10 ?#千位
e = int(s / 10000) ?#万位
if e != 0:
? ? print('5',a,b,c,d,e,sep='') ?#sep是print的一个参数可以改变间隔
elif d != 0:
? ? print('4',a,b,c,d,sep='')
elif c != 0:
? ? print('3',a,b,c,sep='')
elif b != 0:
? ? print('2',a,b,sep='')
else:
? ? print('1,',a)
s2 = int(input('不多于五位的正整数:'))
s2_m = 0
s2_n = s2
while s2_n != 0:
? ? s2_m = (s2_m * 10) + (s2_n % 10)
? ? s2_n = int(s2_n / 10)
print(s2_m)
其实这两个代码表示的是同一个意思。都是把每一位分解出来,依次比较。第一个程序更直观,但是代码更复杂。第二个程序代码有一点难理解,但整体的思路是一样的,也更简洁。
30题:?
s = int(input('五位正整数:'))
a = s % 10 #个位
b = int(s / 10) % 10 #十位
c = int(s / 100) % 10 #百位
d = int(s / 1000) % 10 ?#千位
e = int(s / 10000) ?#万位
if a == e and b == d:
? ? print('是回文数')
else:
? ? print('不是回文数')
num = int(input('请输入一个数,判断是否是回文数:'))
num_p = 0
num_t = num
while num_t != 0: ?####一个数字的倒序
? ? num_p = int(num_p * 10) + int(num_t % 10)
? ? num_t = int(num_t / 10)
if num == num_p:
? ? print(num, '是一个回文数')
else:
? ? print(num, '不是一个回文数')
print(num, num_p)
?
|