我正在尝试解决一个问题,要求找到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或提供任何提示,以提高我当前的解决方案性能。
答案 0 :(得分:2)
问题是你的convert
函数,它会进入无限循环。你只是在n == 1
时才会中断,但如果它永远不变为1会怎么样?
考虑n = 4
和b = 5
。然后4 / 5
将是0
。 n
为零后,它将始终为零,永远不会为1
。
n < b
时,您应该摆脱循环。