![]() |
1
59
减去3,直到 a)命中0-数字可被3整除 b)得到一个小于0的数字-数字不可除 --编辑版本以修复注意到的问题
|
![]() |
2
70
当应用“添加所有数字并查看是否除以3”时,当前的答案都集中在十进制数字上。这个技巧实际上也可以用十六进制表示;例如,0x12可以除以3,因为0x1+0x2=0x3。“转换”为十六进制要比转换为十进制容易得多。 伪代码:
[编辑] 受R的启发,更快的版本(o log n):
|
![]() |
3
32
将数字拆分为数字。把数字加在一起。重复,直到只剩下一个数字。如果这个数字是3、6或9,这个数字可以被3整除。(不要忘记将0作为特殊情况处理)。 |
![]() |
4
17
虽然转换为字符串然后将十进制数字相加的技术很好,但它要么需要除法,要么在转换为字符串的步骤中效率很低。有没有一种方法可以直接将此思想应用于二进制数,而不首先转换为十进制数字的字符串? 事实证明,有: 给定一个二进制数,其奇数之和减去偶数之和可被3整除,如果原始数可被3整除。
例如:以3726为例,它可以被3整除。在二进制中,这是
|
![]() |
5
6
一个可以被3整除的数,其特征是它的数字和可以被3整除。例如,
|
![]() |
6
6
面试问题本质上要求你以3为除数提出(或已经知道)除数规则速记法。 3的可除性规则之一如下:
例子:
也见
|
![]() |
7
5
给定一个数字x。 将x转换为字符串。逐字符分析字符串。将每个解析的字符转换成一个数字(使用atoi())并将所有这些数字相加为一个新的数字y。 重复这个过程,直到最终的结果数是一位数字长。如果这个数字是3、6或9,那么原始数字x可以被3整除。 |
![]() |
8
5
我在Java中的解决方案只适用于32位
未签名的
它首先将数字减少到小于32的数字。最后一步通过将遮罩向右移动适当的次数来检查可除性。 |
![]() |
9
3
你没有标记这个C,但是自从你提到
|
![]() |
10
3
按照同样的规则,为了得到“n”的可除性检验结果,我们可以: 将数字乘以0x1 0000 0000-(1/n)*0xffffffff 比较(1/n)*0xffffffff 对应的是,对于某些值,测试将无法返回所有要测试的32位数字的正确结果,例如,可除以7: 我们得到了0x100000000-(1/n)*0xffffffff=0xdb6db6dc 和7*0xDB6DB6DC=0x6 0000 0004, 我们只测试四分之一的值,但是我们当然可以用减法来避免。 其他示例: 11*0XE8BA2E8C=A0000 0004,值的四分之一 17*0xf0f0f1=10万0000 1 与0xf0f0f0f比较 每一个价值! 等等,我们甚至可以通过在每个数字之间组合自然数来测试它们。 |
![]() |
11
2
如果一个数加起来的所有数字都给出结果3、6或9,则该数可以被3整除。例如,3693可以被3整除,因为3+6+9+3=21,2+1=3,3可以被3整除。 |
![]() |
12
2
在某些编译器上,这比常规方法更快:
|
![]() |
13
1
如果一个数的所有位数之和都可以被3整除,那么这个数就可以被3整除。所以你可以得到每个数字作为输入数字的子串,然后把它们加起来。然后重复这个过程,直到只有一个数字的结果。 如果这是3、6或9,这个数字可以被3整除。 |
![]() |
14
0
一个数可以被3除,如果它的位数之和可以被3除。您可以递归地使用这个定义,直到只剩下一个数字为止。如果结果是3、6或9,则原始数字可以被3整除,否则就不能。 例如:33333=>15(3+3+3+3+3)=>6(1+5),因此33333可以被3整除。 |
![]() |
15
0
C用于检查数字是否可被3整除的解决方案
|
![]() |
16
-1
让我们按照3的倍数进行二元运算。
请注意,对于3的二元倍数 X=ABCDEF 在以下夫妇中 abc =(000011),(001100),(010101) 化学需氧量 所以,我的提议不会改变 算法 :
|
![]() |
17
-1
这是您的优化解决方案,每个人都应该知道………… 来源: http://www.geeksforgeeks.org/archives/511
|