将十进制转换为基数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 = 4b = 5。然后4/5将是0。一旦n为零,它将始终为零,并且从未1

n < b您应该跳出循环。