Adobe面试题“不使用/,%,+和*,如何判断一个数能否被3整除”的解答
2012-10-10 22:23
330 查看
如果n的二进制末位为0,那么n和n>>1同时被3整除或者不整除
如果n的二进制末位为1,那么n和(n>>1)-1同时被3整除或者不整除
bool IsTimesOf3(int n)
{
int s;
if (n < 0)
n = - n;
while (n > 0)
{
s = n & 1;
n >>= 1;
n = n - s;
}
return (n == 0);
}
注:
1.n的二进制末尾为0 为偶数 假设n=2k;又因为 n能被3整除 所以 n=2*3K=6k;那么 n右移1位 相当于除以2 那么 n=n/2;n=3k ;3K一定会整除3; (不能整除 同理可得 即 n=3k+1); 如果n二进制末尾为1,那么是奇数 n=2k+1;又因为n可以被3整除,那么n=3*(2k+1); n右移1位,再减去1.就等于
3k,3k必然能被3整除(不能整除 同理可得)
2.& 是并运算 这里面 1是用二进制0001表示的 比如3的二进制 0011 那么 0011&0001=1 如4的二进制 0100&0001=0 所以 其实就看末尾
末尾如果为0了 那么是偶数 如果末尾为1了就是奇数 所以是用来判断奇数还是偶数的
如果n的二进制末位为1,那么n和(n>>1)-1同时被3整除或者不整除
bool IsTimesOf3(int n)
{
int s;
if (n < 0)
n = - n;
while (n > 0)
{
s = n & 1;
n >>= 1;
n = n - s;
}
return (n == 0);
}
注:
1.n的二进制末尾为0 为偶数 假设n=2k;又因为 n能被3整除 所以 n=2*3K=6k;那么 n右移1位 相当于除以2 那么 n=n/2;n=3k ;3K一定会整除3; (不能整除 同理可得 即 n=3k+1); 如果n二进制末尾为1,那么是奇数 n=2k+1;又因为n可以被3整除,那么n=3*(2k+1); n右移1位,再减去1.就等于
3k,3k必然能被3整除(不能整除 同理可得)
2.& 是并运算 这里面 1是用二进制0001表示的 比如3的二进制 0011 那么 0011&0001=1 如4的二进制 0100&0001=0 所以 其实就看末尾
末尾如果为0了 那么是偶数 如果末尾为1了就是奇数 所以是用来判断奇数还是偶数的
相关文章推荐
- Adobe面试题“不使用/,%,+和*,如何判断一个数能否被3整除”的解答
- 如何判断一个长字符串能否被一个数整除(注意:长字符串很长,不能转换为整数)
- python小练习5:如何判断一个数能否被3整除
- 如何判断一个数字能否同时被两个数整除;
- 【面试题】如何判断一个类是不是另一个的子类
- 快速判断一个数能否被1、2、3、4、5、6、7、8、9、10、11、12、13、17、19、23等整除的规律总结
- 面试题:判断一个整数是否为偶数,要求使用至少3种方法
- 如何判断一个直播系统是否使用的是RTMP
- 快速判断一个数能否被1、2、3、4、5、6、7、8、9、10、11、12、13、17、19、23等整除的规律总结
- 如何判断一个链表中是否有环(百度面试题)
- 快速判断一个数能否被1、2、3、4、5、6、7、8、9、10、11、12、13、17、19、23等整除的规律总结
- 题解分析及总结:经典逻辑面试题“假设有一个池塘,里面有无穷多的水,现有2个空水壶,如何使用少于15L的水,用2个水壶从池塘里取得3升水”
- 6.2判断一个数能否被3整除,如果不能整除就抛出一个异常,并让其调用方法来捕获,显示相应的处理信息
- 模板的使用:如何判断参数是否为一个类
- 如何使用servLetcontext提高网站的性能?一个偏门的问题解答
- Java如何判断一个文件(夹)被重命名过,除了使用md5码校验?【版本控制】
- 不用除法和求模运算,判断一个数能否被3整除
- 如何快速判断一个数能被整除的方法(1-23之内)
- 快速判断一个数能否被1、2、3、4、5、6、7、8、9、10、11、12、13、17、19、23等整除的规律总结
- 如何判断一个数是不是回文数(不使用字符串库函数)?比如5,23432,777,9779