2011-03-12 75 views
2

我試圖解決一個問題,要求查找所有在基數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或給任何提示,以提高我目前的解決方案的性能。

回答

2

問題是你的convert函數,它運行到一個無限循環。你只是在打破時n == 1,但如果它永遠不會成爲1呢?

考慮n = 4b = 5。然後4/5將是0。一旦n爲零,它將始終爲零,並且從未1

n < b您應該跳出循環。

相關問題