要检查十进制数是否可以被7整除:
删除最后一位。将其乘以2并从剩余的值中减去。如果结果可被7整除,则原始数字可被7整除。
(例如也在此处描述)
此规则适用于手动除数检查。例如:
2016年是否可以被7整除?
减去
6*2
201;我们得到189。这是否可以被7整除?要检查它,让我们再次应用规则。减去
9*2
18;我们得到0。因此,2016被7整除。
在此挑战中,您应应用此规则,直到可分割状态明显,即该数字不大于70(但是,请参阅下面的详细信息)。制作功能或完整程序。
输入:正整数;您的代码应支持最多32767的输入(支持任意精度整数是一个加分项;请参见下文)。
输出:不大于70的整数(可能为负数),这是将7除数规则应用零次或更多次的结果。
测试用例:
Input Output Alternative output
1 1
10 10 1
100 10 1
13 13 -5
42 42 0
2016 0
9 9
99 -9
9999 -3
12345 3
32767 28 -14
---------- Values below are only relevant for the bonus
700168844221 70 7
36893488147419103232 32 -1
231584178474632390847141970017375815706539969331281128078915168015826259279872 8
如果指定了两个可能的输出,则任何一个结果都是正确的:第二个结果对应于再次应用该规则。禁止将规则应用于单个数字:如果删除该数字,则不会留下任何内容(非0)。
奖励:如果您的算法
- 支持任意精度整数
- 仅对输入执行一次传递
- 具有空间复杂度
o(n)
(即小于O(n)
);和 - 有时间复杂度
O(n)
,
n
小数位数在哪里:
从代码的字节数中减去50%。
实际奖金:
另外,如果您的算法从最高有效位开始沿正常方向读取输入,请再次减去50%-您的得分是字节数的25%(这似乎是可能的,但我不确定)。
1000000000000000000001
。
long long
s或某种等效类型怎么办?