преобразовать десятичную в основание х - PullRequest
2 голосов
/ 12 марта 2011

Я пытаюсь решить проблему, которая просит найти все квадраты 1 <= N <= 300, которые являются палиндромными, когда выражены в базе B. Однако у меня есть решение, оно слишком медленное и замедляетЭто мое решение для преобразования числа в основание B. </p>

long around(long n)
{
    long around = 0;

    while (n > 0){
        around = around * 10 + (n % 10);
        n = n / 10;
    }

    return around;
}

long convert(int n, int b)
{
    long x = 0;

    while (true){
        x = x * 10 + (n % b);
        if (n == 1)
            break;
        n = n / b;
    }

    return around(x);
}

Пожалуйста, порекомендуйте любые более быстрые решения для преобразования десятичного числа в основание B или дайте какие-либо советы по улучшению производительности моих текущих решений.

1 Ответ

2 голосов
/ 12 марта 2011

Проблема в том, что ваша функция convert работает в бесконечном цикле.Вы разбиваете только тогда, когда n == 1, но что, если оно никогда не станет 1?

Рассмотрим n = 4 и b = 5.Тогда 4 / 5 будет 0.Если n равно нулю, оно всегда будет равно нулю и никогда 1.

Вы должны выйти из цикла, когда n < b.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...