将十进制转换为基数x

时间:2011-03-12 15:16:24

标签: algorithm

我正在尝试解决一个问题,要求找到1< = N< = 300的所有正方形,当在基础B中表达时,它是回文的。我已经得到了我的解决方案,但它太慢了,什么正在减慢它是我将数字转换为基数B的解决方案。

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 个答案:

答案 0 :(得分:2)

问题是你的convert函数,它会进入无限循环。你只是在n == 1时才会中断,但如果它永远不变为1会怎么样?

考虑n = 4b = 5。然后4 / 5将是0n为零后,它将始终为零,永远不会为1

n < b时,您应该摆脱循环。