1 c++
int f(int n, int mul) {
if (abs(n)%mul == 0) return n;
else return f(n - 1, mul);
}
Run Code Online (Sandbox Code Playgroud)
所以它向下舍入到下一个mul.但显然对n的大值不好.如何安全有效地表达?
这相对简单,您只需在调整变量时评估变化的表达式,直到结果满足正确的条件:
while (abs(n) % mul != 0) --n;
Run Code Online (Sandbox Code Playgroud)
笔记:
abs()看起来很无辜,但如果你在二进制补码系统中给出最小的整数呢?根本没有绝对值可以表示为这样的整数.n可能会下溢,导致未定义的行为(以及令人惊讶的结果).mul不是积极的话怎么办?代码不以任何方式处理这种情况,而函数签名允许它.| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |