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;