我的任务是递归地反转一个整数。我知道如何制定我的基本案例,但我不确定在if语句之外放什么。我不确定的部分都带有问号。第一部分,我不知道该放什么,第二部分我不确定它是否正确。谢谢你的帮助。
注意:我希望尽可能避免使用导入等外部功能和类似的东西。
def reverseDisplay(number):
if number < 10:
return number
return # ??????????
def main():
number = int(input("Enter a number: "))
print(number,end="") #???????????
reverseDisplay(number)
main()
答案 0 :(得分:1)
老实说,这可能是一个糟糕的主意,但谁知道它可能会有所帮助:
不是性能最佳的解决方案,而是解决方案......
否则必须有一些公式。比如这里: https://math.stackexchange.com/questions/323268/formula-to-reverse-digits
答案 1 :(得分:1)
我不会给你答案,但我会给出一些提示。看起来你不想将它转换为字符串 - 这使它成为一个更有趣的问题,但会导致一些时髦的行为。例如,reverseDisplay(100) = 1
。
但是,如果您还没有很好地处理递归,我强烈建议您将输入转换为字符串并尝试递归反转该字符串。一旦你理解了如何做到这一点,算术方法将更加直截了当。
你的基础案例是可靠的。反转的数字是相同的数字。
def reverseDisplay(n):
if n < 10:
return n
last_digit = # ??? 12345 -> 4
other_digits = # ??? You'll use last_digit for this. 12345 -> 1234
return last_digit * 10 ** ??? + reverseDisplay(???)
# ** is the exponent operator. If the last digit is 5, this is going to be 500...
# how many zeroes do we want? why?
如果您不想使用任何字符串操作,您可能必须编写自己的函数来获取整数中的位数。为什么?你会在哪里使用它?
想象一下,你有一个字符串12345.
reverseDisplay(12345) is really
5 + reverseDisplay(1234) ->
4 + reverseDisplay(123) ->
3 + reverseDisplay(12) ->
2 + reverseDisplay(1) ->
1
答案 2 :(得分:1)
假设您有一个数字列表,您希望将其转换为int
:
[1,2,3,4] -> 1234
你这样做1 * 10 ^ 3 + 2 * 10 ^ 2 + 3 * 10 ^ 1 + 4. * 10 ^ 0。在您想要反转数字的情况下,10的幂完全相反。这样做如下:
def reverse(n):
if n<10:
return n
return (n%10)*10**(int(math.log(n,10))) + reverse(n//10)
那math.log
个东西只是确定数字中的位数,因此应该乘以10的幂。
输出:
In [78]: reverse(1234)
Out[78]: 4321
In [79]: reverse(123)
Out[79]: 321
In [80]: reverse(12)
Out[80]: 21
In [81]: reverse(1)
Out[81]: 1
In [82]: reverse(0)
Out[82]: 0
答案 3 :(得分:1)
正是@GregS在评论中提出的建议。反转的关键是使用模运算符提取最后一位数字并将每个提取的数字转换为字符串,然后简单地将它们连接回字符串的反面:
def reverseDisplay(number):
if number < 10:
return str(number)
return str(number % 10) + reverseDisplay(number / 10)
def main():
print (reverseDisplay(int(input("Enter a number: "))))
main()
不使用递归的替代方法:
def reverseDisplay(number):
return str(number)[::-1]