1. 程式人生 > >校招季——程式設計題目(73) 迴文數

校招季——程式設計題目(73) 迴文數

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,再比較xy是否相等:

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;