用户可以输入0或1,它将附加到起始编号为0。
每次用户添加数字时,程序都应该判断整数是否可以被5整除。
示例:
我知道答案与最后一个余数有关,并保留最后一个余数,但我找不到精确的计算或逻辑或数学来做。
答案 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的倍数。
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");
}