将十进制转换为基数x
问题描述:
我试图解决一个问题,要求查找所有在基数B中表示为回文的1 < = N < = 300的方块。但是,我也有解决方法慢,什么是慢下来是我的解决方案,以转换底数为B.将十进制转换为基数x
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或给任何提示,以提高我目前的解决方案的性能。
答
问题是你的convert
函数,它运行到一个无限循环。你只是在打破时n == 1
,但如果它永远不会成为1呢?
考虑n = 4
和b = 5
。然后4/5
将是0
。一旦n
为零,它将始终为零,并且从未1
。
当n < b
您应该跳出循环。