在练习递归时,我遇到了一个使用递归反转整数的问题。我试图在不将整数转换为字符串的情况下回答这个问题
我能够部分地解决这个问题,但是输出总是没有来自原始输入的任何零。下面是我想出的代码:
def reverseNumber(n):
if (n//10) == 0:
return n
lastDigit = n%10
ans = reverseNumber(n//10)
nod = 0
for i in str(ans):
nod += 1
return (10**nod)*lastDigit + ans
通过检查,我可以看到这是因为当lastDigit
为0时,它只返回递归调用的反向整数,即输入4230将给出324
但这也意味着,随着递归调用的深入,原始输入之间的所有零也将被删除
因此,请告诉我如何修改此代码,以便在反转时不删除原始输入中的零
reverseNumber
应返回一个int
并接受正数和负数在不处理负数的情况下修复代码的最简单方法是:
印刷品:
对!!当处理
int
类型而不是str
类型时,120的反方向是21另一个处理负数的实现采用了完全不同的方法:
我已经将其分解为两个函数。函数
rev
是一个生成器函数,它假定调用它时使用的是一个正数,而不是负数,并将递归地生成该数的倒数的连续数字reverseNumber
将这些数字合并,转换为int
,调整符号并返回最终结果印刷品:
您可能只需要这样:
对于所有非负
n
,当n < 10
是一个单位数时,它已经与其反向相同-相关问题 更多 >
编程相关推荐