如何检查二进制数是否可以除以10(十进制),而不将其转换为其他系统。 例如,我们有一个数字:
1010 1011 0100 0001 0000 0100
我们如何检查这个数字是否可被10整除?
答案 0 :(得分:3)
首先将数字分成奇数和偶数位(我称之为“偶数”) 对应于2)偶数幂的位:
100100110010110000000101101110 0 1 0 1 0 0 1 0 0 0 1 1 0 1 0偶数1 0 0 1 0 1 1 0 0 0 0 0 1 1 1奇数
现在,在每个中,交替地加上和减去数字,如 十进制11的可分性标准测试(以。开头) 在右边添加):
100100110010110000000101101110 + 0-1 + 0-1 + 0-0 + 1-0 + 0-0 + 1-1 + 0-1 + 0 = -2 + 1-0 + 0-1 + 0-1 + 1-0 + 0-0 + 0-0 + 1-1 + 1 = 1
现在将奇数位的总和加倍并将其加到偶数之和 位:
2 * 1 + -2 = 0
如果结果可以被5整除,就像在这种情况下,数字本身就是 可被5整除。
因为这个数字也可以被2整除(最右边的数字是 0),它可被10整除。
答案 1 :(得分:1)
如果您正在谈论计算方法,您可以进行5级可分性测试和2级可分性测试。
下面的数字假设无符号32位算术,但可以很容易地扩展到更大的数字。
我首先提供一些代码,然后是更多的文字解释:
unsigned int div5exact(unsigned int n)
{
// returns n/5 as long as n actually divides 5
// (because 'n * (INV5 * 5)' == 'n * 1' mod 2^32
#define INV5 0xcccccccd
return n * INV5;
}
unsigned int divides5(unsigned int n)
{
unsigned int q = div5exact(n);
if (q <= 0x33333333) /* q*5 < 2^32? */
{
/* q*5 doesn't overflow, so n == q*5 */
return 1;
}
else
{
/* q*5 overflows, so n != q*5 */
return 0;
}
}
int divides2(unsigned int n)
{
/* easy divisibility by 2 test */
return (n & 1) == 0;
}
int divides10(unsigned int n)
{
return divides2(n) && divides5(n);
}
/* fast one-liner: */
#define DIVIDES10(n) ( ((n) & 1) == 0 && ((n) * 0xcccccccd) <= 0x33333333 )
2的可分性很容易:(n&amp; 1)== 0 表示 n 是偶数。
可分性乘以5涉及乘以5的倒数,即0xcccccccd(因为 0xcccccccd * 5 == 0x400000001 ,如果截断为32位,则仅为0x1)。
当你将 n * 5 乘以5的倒数时,得到 n * 5 *(5的倒数),它在32位数学中简化为 n * 1 。
现在让我们说 n 和 q 是32位数字, q = n *(倒数5)mod 2 32 的。
因为 n 不大于0xffffffff,我们知道 n / 5 不大于(2 32 -1)/ 5 (即0x33333333)。因此,我们知道 q 是否小于或等于(2 32 -1)/ 5 ,那么我们知道 n < / em>精确地除以5,因为 q * 5 不会被截断为32位,因此等于 n ,所以 n 除以 q 和5。
如果 q 大于(2 32 -1)/ 5 ,那么我们知道它不会分为5,因为那里是可被5整除的32位数字与0和(2 32 -1)/ 5 之间的数字之间的一对一映射,因此任何数字都是此范围不会映射到可被5整除的数字。
答案 2 :(得分:0)
这是python中的代码,用于使用按位技术检查以10为底的可分性
#taking input in string which is a binary number eg: 1010,1110
s = input()
#taking initial value of x as o
x = 0
for i in s:
if i == '1':
x = (x*2 + 1) % 10
else:
x = x*2 % 10
#if x is turn to be 0 then it is divisible by 10
if x:
print("Not divisible by 10")
else:
print("Divisible by 10")