アプリ版:「スタンプのみでお礼する」機能のリリースについて

効率的に数値を反転させるにはどうやれば良いですか?

-2147483648 -> -8463847412
にしたいです

質問者からの補足コメント

  • 皆さんの解答を計測してみました

    まだ効率の良い方法がないかと模索しています

    # No.1さんの回答
    import time
    start_time = time.time()
    for i in range(100000):
    x = -2147483648
    result = 0
    while x:
    result = result * 10 + x % 10
    x /= 10

    end_time = time.time()
    print("processing time: {}(sec)".format(end_time - start_time))
    # 5.017829895019531(sec)

      補足日時:2021/10/11 16:00
  • 以下計測方法は略
    # No.2さんの回答
    result = int(str(n)[0] + "".join(list(reversed(list(str(n)[1:])))))
    # 0.15281891822814941(sec)

    # No.3さんの回答
    str_x = str(abs(x))[::-1]

    if x < 0:
    int_x = -int(str_x)
    else:
    int_x = int(str_x)
    # 0.062355995178222656(sec)

    # No.4さんの回答
    result = -int(str(x)[::-1][:-1])
    # 0.06681394577026367

      補足日時:2021/10/11 16:01

A 回答 (4件)

数値を反転させるには


いくつか方法がありますが
10で割って足してというのは効率が悪いので文字列に変換して反転した方が圧倒的に速度は早いです

以下でどうでしょうか?

x = -2147483648
str_x = str(abs(x))[::-1]

if x < 0:
int_x = -int(str_x)
else:
int_x = int(str_x)

print(int_x)
    • good
    • 0
この回答へのお礼

参考になりました

お礼日時:2021/10/11 15:34

あー、そうだな、こう書いた方が簡単か。



>>> x = -2147483648
>>> -int(str(x)[::-1][:-1])
-8463847412
    • good
    • 0
この回答へのお礼

参考になりました

お礼日時:2021/10/11 15:34

>>> n = -2147483648


>>> int(str(n)[0] + "".join(list(reversed(list(str(n)[1:])))))
-8463847412
>>>
    • good
    • 0

10進数の桁を左右反転する、でよろしいでしょうか?



変数 x を処理対象とする
作業用変数 a = xの絶対値(abs) と b = 0 を用意
a を 10 で割り(/)、b を 10 倍(*)してaを割った余り(%)を加算
上記を a が 0 になるまで繰り返す
最後に x が負数なら b を符号反転(-)
x に b を代入
    • good
    • 0
この回答へのお礼

質問の日本語理解できないのですね

それとあなたの回答は効率的では無くダメな解答例です

お礼日時:2021/10/11 14:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!