получить неправильный ответ при преобразовании числа n в базе b (2 <= b <= 10) в десятичное число: - PullRequest
0 голосов
/ 23 февраля 2020

Я создал функцию для преобразования числа n в любое основание b, например: 4325 означает `5 + 2 x 10 + 3 x 10 x 10 + 4 x 10 x 10 x 10

и я пытался использовать этот логин c для конвертации, но он возвращает неправильный ответ.

def decimal(n,b):
    result=0
    multiplier=1
    while n>0:
        result+=n%b *multiplier
        multiplier=b
        n/=b
    return result

1 Ответ

1 голос
/ 23 февраля 2020

Похоже, вы не совсем понимаете, как работает система счисления. Вот исправленная версия вашего кода:

def decimal(n, b):
    result = ""
    while n > 0:
        result = str(n % b) + result
        n = n // b
    return result

Система счисления - это просто представление числа. Изменение системы не влияет на значение переменной.

Так что я перечислю несколько ошибок, которые вы допустили в своем коде:

  1. Тип возвращаемого значения. Как я уже упоминал ранее, мы должны вернуть представление числа, поэтому вы не можете обработать представление в виде другого числа. Это возможно, но это разрушает логику c. Я бы порекомендовал вам продолжить с str;
  2. L oop условие. В вашем коде вы используете регулярное деление на 10, что полностью нарушает логику c функции, потому что обычно она должна делиться на базу системы счисления (значение переменной b). Но это не единственная проблема. Возвращение n / 10 будет равно float значению, которое теоретически никогда не будет равно 0. Единственная причина, по которой ваш l oop остановлен, - это то, как python работает с плавающей точкой (после некоторого количества итераций n будет округлено до 0.0).
...