1

リストや文字列を使用せずに整数入力を逆にする必要がある問題に取り組んでいます。しかし、私のプログラムは最初と最後の数字しか返しません。

def reverseDisplay(number):
   if number<10:
      return number 
   else:
      return reverseDisplay(number//10)
def main():
    number=int(input("Enter a number:"))
    print(number%10,end='')
    print(reverseDisplay(number))
main()

逆関数は一度だけ機能したようです。

4

13 に答える 13

10

これは機能するはずです:

from math import log10
def rev(num):
    if num < 10:
        return num
    else:
        ones = num % 10
        rest = num // 10
        #print ones, rest, int(log10(rest) + 1), ones * 10 ** int(log10(rest) + 1)
        return ones * 10 ** int(log10(rest) + 1) + rev(rest)
print rev(9000), rev(1234), rev(1234567890123456789)

log10ネストされた再帰関数を使用して、呼び出す回数と数学演算の数を減らすこともできます。

def rev(num):
    def rec(num, tens):
        if num < 10:
            return num        
        else:
            return num % 10 * tens + rec(num // 10, tens // 10)
    return rec(num, 10 ** int(log10(num)))
于 2012-11-15T23:07:31.813 に答える
1

複数回実行されていますが、左端の桁のみが返されます。どのような状況下でそれが真実であるかを考えれば、それが事実であることが非常に簡単にわかりifます。

これを機能させるには、再帰から抜けるときにスキップした数字を追​​加する必要があります。以下は、前の結果の左側に渡された数字を単にタックすることによって機能します。文字列変換なしでやりたいのですが、それを行うためのエレガントな方法を思い付くことができませんでした...

def reverseDisplay(number):
   if number<10:
      return number 
   else:
      return int(str(number%10) + str(reverseDisplay(number//10)))
def main():
    number=int(input("Enter a number:"))
    print(number%10,end='')
    print(reverseDisplay(number))
main()
于 2012-11-15T23:00:37.387 に答える
1

編集:これは実用的なソリューションです。

def rev(x, prod=0):
    if x < 10:
        return prod + x
    else:
        prod = prod * 10 + x%10 * 10
        return rev(x / 10, prod)

結果:

>>> rev(123)
321
>>> rev(12345)
54321
>>> rev(72823780029)
92008732827L
>>> rev(1)
1
于 2012-11-15T23:27:43.257 に答える
1

これは機能するはずです:Python3でチェック

# reverse a number
def reverseNum(n, rem=0):
   if n == 0:
      return (rem)//10
   else:
      return reverseNum(n//10, (rem+(n%10))*10)

print(reverseNum(7165))
print(reverseNum(123456789))

少し変更されたバージョン:

def reverseNum(n, rem=0):
    if n == 0:
        return rem
    elif n<10:
        return reverseNum(n//10, (rem+(n%10)))
    else:
        return reverseNum(n//10, (rem+(n%10))*10)

print(reverseNum(7165))
print(reverseNum(123456789))
于 2019-01-24T05:21:19.733 に答える
0
def reverseDisplay(number):
    if number<10:     
        return number                      #1 
    first_digit = number % 10              #2
    the_rest = reverseDisplay(number//10)
    ex = 0
    while 1:                               #3
        ex = ex + 1
        if number//(pow(10,ex)) == 0:
            break
    ex = ex - 1
    return first_digit*pow(10,ex) + the_rest #4

仕組みは次のとおりです...(ここで参照している行にラベルを付けました)

  • 1行目:終了条件。しかし、あなたはこれを知っています
  • 2行目:最後の桁を取得します。%は、除算の余りを見つけることを意味します
  • 3行目:123を渡すとすると、この時点でfirst_digit=3とthe_rest=21になります。結果を321=300 + 21にする必要があります。これが機能するために必要なのは、first_digitを10倍する必要がある回数を知ることです。
  • 4行目:うーん美味しい
于 2012-11-15T22:59:38.670 に答える
0

再帰は要件ではなかったという仮定の下で(簡単に可能な場合は、再帰で置き換えることをお勧めします)、以下のコードをお勧めします。わかりやすくするために関数名を変更し、他の提案でのべき乗と対数演算のやり過ぎを回避しました。

def reverseNumber(n):
   assert isinstance(n, int) and n >= 0
   base = 10
   result = 0
   while n != 0:
      n, remainder = divmod(n, base)
      result = result*base + remainder
   return result
于 2012-11-15T23:03:58.527 に答える
0

これを行うには、すでに処理された桁数を追跡する追加のカウントを維持します。

これは、ラッパー関数を使用して実行できます。

def reverseRecursion(number, i):
    if number < 10:
        return number 
    else:
        return reverseRecursion(number//10, i+1) + (number % 10)*(10**i)

def reverseDisplay(number):
    return reverseRecursion(number, 1)

def main():
    number = 1234
    print(reverseDisplay(number))

main()

アイデアは、カウンターを使用して、追加を機能させるために現在の数に追加する後続のゼロの数を追跡することです。

これをトレースすると、次のようになります。

number = 1234

ans(123) + 40
ans(12) + 300 + 40
ans(1) + 2000 + 300 + 40
1 + 2000 + 300 + 40
=> 2341
于 2012-11-15T23:26:55.410 に答える
0
def inverte_digitos(n):
        def inverte_aux(n, n_novo):
                if n == 0:
                        return n_novo
                else:
                        return inverte_aux(n//10, n_novo*10+n%10)
        return inverte_aux(n, 0)

これは私がしたことです

于 2013-01-25T11:58:35.243 に答える
0
def reverseDisplay(number,k):
    if number >0:
        i=(k)*10+number%10
        j = number//10
        return reverseDisplay(j,i)
    else:
        return k

def main():
    number = 1234567
    print(reverseDisplay(number,0))

main()
于 2016-04-14T09:54:38.053 に答える
0
def reverse_num_RECUR(num):

    if num<10:
        return num
    else:
        # print(str(num%10))
        return  (str(num%10)+str(reverse_num_RECUR(num//10)))

print('see Reverse ',reverse_num_RECUR(410010699900012066))
于 2019-04-17T07:26:37.257 に答える
-1
def reverseDisplay(variable):


        if variable // 10  == 0  : #base case
                print (variable, end='')
                return
        else:
                first = variable % 10
                every_dig_after = variable // 10 
                return reverseDisplay (variable % 10 )   ,  reverseDisplay(every_dig_after) 




def main():
        number = int (input ( "Enterr a number:"))
        reverseDisplay(number)

main()
于 2014-11-27T18:58:17.250 に答える
-1
#Recursive function body
def reverse(n, s):
    if n > 0:
        s = s*10 + n%10
        reverse(n//10, s)
    else:
        print(s)
#Block of the main program
n = int(input("Enter number"))
d = reverse(n, 0)
于 2020-05-02T16:36:38.057 に答える
-2
def reverseDisplay(number):
   if number<10:
      return number 
   else:
      return reverseDisplay(number//10) + number # you forgot add me
于 2012-11-15T22:47:22.660 に答える