如何在每次输入数字时检查由连续用户输入提供的二进制数是否可被5整除?

时间:2013-04-17 10:53:05

标签: c binary

用户可以输入0或1,它将附加到起始编号为0。

每次用户添加数字时,程序都应该判断整数是否可以被5整除。

示例:

  1. 第一个数字是0.
  2. 用户输入'1' - 完整号码为'1' - 答案为否。
  3. 用户输入'0' - 完整号码为'10' - 答案为否。
  4. 用户输入'1' - 完整号码为'101' - 答案是肯定的。
  5. 我知道答案与最后一个余数有关,并保留最后一个余数,但我找不到精确的计算或逻辑或数学来做。

3 个答案:

答案 0 :(得分:5)

在伪代码中:

remainder=0
while true {
    remainder = remainder % 5
    if remainder = 0
        print "divisbile"
    else
        print "nondivisible"

    remainder = (remainder<<1) + inputBit
}

说明:如果一个数字可被5整除,那么该数字的倍数也可以被5整除,因此该部分没有意义。由于您的扩展可以建模为乘以2和加法,因此可以将其应用于您的问题。现在你要做的就是乘以余数并添加输入并检查它是否可以分解。

答案 1 :(得分:1)

int old_x = 0,new_x;
    while(1)
    {
    scanf("%d",new_x);
    new_x= ((old_x<<1)|new_x);
    old_x = new_x ;
    new_x = new_x%5;
    if(!new_x)
    {
    printf("divisible by 5)
    old_x = 0;
    }
    else
    printf("not divisible by 5)
}

答案 2 :(得分:0)

诀窍是要知道如果一个数字可以被5整除,你只需要知道数字的最后一个十进制数。如果它以5或0结束,则它可以被5整除。如果它不以5或0结束,则需要额外的金额,我称之为 remaining 到达那里。现在假设您有余数,您可以对该数字的最后一位进行反向工程。然后将最后一位移动2并添加用户输入的新数字( d )。取决于 d ,您将获得该数字的新的最后一位数字。有了它,你可以再次看到必须添加什么newremainder才能获得下一个5的倍数。

enter image description here

int newRemainder[2][5] = {{0,2,4,1,3},{4,1,3,0,2}};
int remainder = 0;
int d;

while(1){
   scanf("%d", &d);
   remainder = newRemainder[d][remainder];
   if (remainder ==0) printf("multiple");
}