校招季——程式設計題目(73) 迴文數
阿新 • • 發佈:2019-02-05
73. 迴文數
題目:
1.測試一個數是不是迴文數。
2.逆轉一個數的二進位制表示。
解答:
對於問題1,方法1:
用itoa將這個數轉換成字串,再測試這個字串是不是迴文字串。
方法2:
用兩個mask從兩端提取數字再比較:
int mask1 = /* 和x同位數,略 */, mask2 = 10; for ( ; mask1 > mask2; mask1 /= 10, mask2 *= 10) { int n1 = x / mask1 % 10; int n2 = x % mask2 * 10 /mask2; if (n1 != n2) return 0; } return 1;
方法3:
將x轉換為它的逆轉形式y,再比較x和y是否相等:
int y = 0, tx = x;
for ( ; x > 0 ; x /= 10)
y = 10 * y + x % 10;
return tx == y;
對於問題2,可以用到問題1方法3的程式碼,只要將其中的10改成2即可:
int y = 0;
for ( ; x > 0 ; x /= 2)
y = 2 * y + x % 2;
return y;