在不使用反转函数或列表的情况下反转整数

2024-09-28 01:24:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在为我班上的一个问题而挣扎,当我提出一个解决方案时,我的教授告诉我这是不正确的,尽管我得到了他要求的结果,同时又遵守了他为这个问题制定的规则

该问题要求我执行以下操作:

Write a Python program that reads an integer from the keyboard and write its reverse to the screen. You need to use a for loop, don't use the reverse function or a list.

我的代码如下所示:

num = int(input("So you like things backwards eh? Well, enter a number and 
I'll do my best: "))
Onum = str(num)
revStr = ""
for x in Onum:
  revStr = x + revStr

print("Your wish is my command! Your" , num, "looks like", revStr, "Backwards!")

它适用于任何以0结尾的数字甚至数字

我不知道如果有限制,我还能怎么做。我会做错什么


Tags: andthetoforyourusemy数字
2条回答

试试这个:

def reverse(n):
    m = 0
    while n > 0:
        n, r = divmod(n, 10)
        m = 10 * m + r
    return m

然而,对于一个实际的应用程序,我希望以下速度会快得多:

def reverse(n):
    return int(str(n)[::-1])

尝试满足注释中给出的愚蠢约束的其他几种方法:

n = 45712090
s = str(n)
t = ""
m = len(s)
for i in range(m):
    t = s[i] + t
print(t)


n = 45712090
s = str(n)
m = len(s)
for i in range(m - 1, -1, -1):
    print(s[i], end="")
print()


import math
n = 45712090
m = math.ceil(math.log10(max(1, n)))
for i in range(m):
    n, r = divmod(n, 10)
    print(r, end="")
print()
a = int(input())
b = 0 

while(a>0):
    b = b*10 + a%10
    a = a//10

print(b)

在while循环中,我们传递条件,运行直到a(12345)小于0,开始时b=0,这样b*10等于0+a(12345)%10=5(将是a的最后一位),然后在下一行中,当您在a(12345)//10中进行楼层划分时,它将去掉a的最后一位,并变为1234,此循环再次运行,并检查a(1234)>;然后到第二行,这次b=b(5)*10+a(1234)%10,b变为50,a变为123,这将一直到a中没有数字为止,我希望你们能理解

相关问题 更多 >

    热门问题