`check/= 2;`的解释

Chi*_*hin 4 java

我需要对此代码进行一些解释.这是其他人给出的示例代码.

    for ( int i = 1; i <= 8; i++ )
    {
        if(check % 2 == 0)
            sum += i;
        else
            sum -= i;
        check /= 2;            <--- Need explanation for this line.
    }
Run Code Online (Sandbox Code Playgroud)

但在这里Pseudo code,没有check /= 2;程序.

这是完整的Pseudo code.

int binary = 0;
int sum;

while(binary<256)
sum = 0;
for(go through all 8 digits)
    if the i-th digit is 0
        sum += i
    if the i-th digit is 1
        sum -= i
end for

if sum == 0
    output

binary++
end while
Run Code Online (Sandbox Code Playgroud)

那么,那行代码的目的是什么?

sum,binarycheck,初始化为0.

我使用上面给出的伪代码编写了这段代码.但似乎我的代码将复制输出和另一个问题,格式.

我希望输出像这样的格式:

Enter a number : 3

-1 -2 +3 = 0
1 +2 -3 = 0 
Run Code Online (Sandbox Code Playgroud)

但我目前的输出是:

Enter a number : 3

-1 -2 3 = 0
1 2 -3 = 0
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

CODE IS REMOVED!
Run Code Online (Sandbox Code Playgroud)

解决了!

我太专注于for输出部分的while-loop ,因此错过了二进制的-loop,因为伪代码用于256个可能的解决方案,因此,前端部分将有相同的输出,例如:

1 - 2 - 3 + 4 = 0                             

1 - 2 - 3 + 4 + 5 - 6 - 7 + 8 = 0
Run Code Online (Sandbox Code Playgroud)

因此,伪代码可以给出相同的输出.所以,既然解决方案在2 ^ n哪里n = 1, 2, 3, ...,那么就改变了

 while( binary < 256 )   --->     while ( binary < Math.pow(2, input))
Run Code Online (Sandbox Code Playgroud)

应该解决它.

解决了答案的格式和副本.

MBy*_*ByD 5

这是通往的方式go through all digits.check % 2检查最右边的数字,并在检查后,将check一位数(位)向右移动check /= 2(等于check = check / 2;)