原题目:给定一个整数 N,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零。
位数整除计算是数字反转比较常见的做法,心血来潮试着用列表来做做以熟悉列表的使用,结果在调试过程中出现了很多小错误。
一下是需要注意的地方:
1.数字串的中间可能会有0,不能误删
2.数字串的末尾可能不止一个0,不能漏删
3.“-”的保留问题
4.单个0的输入输出比较特殊
代码如下:
#用列表来做
num=input()
list=[]
for i in num:
list.append(i) #将输入的数字和符号分别加入列表
if len(list)!=1: #除去单独输入0的情况
#从后往前遍历列表,是0则删除,若碰到不是0的数即刻停止循环
#此处不方便使用len(list)有关索引,因为它的值随着0的删除时刻变化
for i in range(len(list)):
if list[-1]=="0":
del list[-1]
else:
break
L=len(list)
#若列表中存在符号则先打印
if list[0]=='-':
print("-",end="")
for j in range(L-1):
print(list[L-j-1],end="")
else:
for j in range(L):
print(list[L-j-1],end="")
同样附上数字计算方法:
#用数字计算来做
from math import*
num=eval(input())
num0=abs(num)
def solution(num0):
L=len(str(num0))
num1=0
for i in range(L):
num1+=num0//(10**(L-1-i))*(10**(i))
num0=num0%(10**(L-1-i))
return num1
if num>0:
print(solution(num0))
if num==0:
print(0)
if num<0:
print(f"-{solution(num0)}")
两种方法中,个人认为数字计算方法还是最优解,因为相比于列表无需考虑末尾0的问题。