我想要一个只使用移位,加法或减法运算的算法来查找数字是否是6的倍数。所以,基本上只是二进制运算。
到目前为止,我认为我应该合理地将数字移动两次除以4,然后从中减去6次。但我知道我的方法有问题,无法弄清楚是什么。
答案 0 :(得分:7)
答案 1 :(得分:0)
Reference: http://wiki.answers.com/Q/How_can_you_tell_if_a_number_is_a_multiple_of_6
It is a multiple of six if BOTH of the following statements are true:
1) The last digit (ones place) is 0, 2, 4, 6, or 8.
2) When you add all the digits together, you get a multiple of 3.
Reference: http://wiki.answers.com/Q/How_can_you_tell_if_a_number_is_a_multiple_of_3
1) Start with a number N.
2) Sum the digits of the number, and get M.
3) If M is larger than 10, set N=M and return to stage 2.
4) Otherwise, M is now smaller than 10. If M is 0,3,6 or 9, then N is a multiple of 3
答案 2 :(得分:0)
您可以尝试使用可用的基本操作来实现除法算法。从4年级开始的基本长分算法可能就足够了(只需要用基数2而不是基数10来做事,用位移代替乘法)
答案 3 :(得分:0)
如何将数字减去6,直到它达到零。 如果你得到零,那么这个数字可以被6除尽。 要么 继续将数字除以2(二进制上的移位操作),直到数字小于12。 然后从中减去6。如果小于零(不可分) 如果零可分。 如果不减3 如果小于零(不可分) 如果零可分。
答案 4 :(得分:0)
行。这就是我要做的事情(只是第一个想法):
6的倍数是2和3的倍数,所以它应该同时满足2和3的可分性标准......所以......
检查可分性2 :
如果remaining = 1,则为FALSE,否则继续。
如上所述,通过2检查可除性显然也可以通过(N& 1 == 0)实现。这只是检查N的二进制表示的最后一位:如果它是1,N是奇数(因此不能被2整除),如果它是0,则它是完全可分的......
答案 5 :(得分:0)
如果我们将操作范围扩展到“位掩码”和“位移”,那很简单。
正如相当多的人所说,两分之二的可分性相当于(n & 1) == 0
。可分性为3(相对)容易二进制。将累加器a
初始化为0,然后重复a += (n & 3); n = (n >> 2);
,直到n为0.如果(且仅当)a为3,则n可被3整除。