给定一个范围内的N和一个偏移量O中的数字,什么是最简单的方法(较少的代码)来在R中绕过N + O。
同时假定N、R、min、max和O整数。
例如:
案例1
N = 5
R = [-10, 10)
O = 5
Answer = -10案例2
N = 5
R = [-10, 10)
O = 20
Answer = 5案例3
N = -10
R = [-10, 10)
O = -1
Answer = 9发布于 2022-06-05 03:48:52
有一种方法:
fn clamp_round(n: i32, r: std::ops::Range<i32>) -> i32 {
(n + r.start).rem_euclid(r.end - r.start) + r.start
}
fn main() {
dbg!(clamp_round(5 + 5, -10..10));
dbg!(clamp_round(5 + 20, -10..10));
dbg!(clamp_round(-10 + -1, -10..10));
dbg!(clamp_round(5 + 5, 100..110));
dbg!(clamp_round(5 + 20, 100..110));
dbg!(clamp_round(-10 + -1, 100..110));
}注意,我们在这里使用rem_euclid以我们想要的方式处理负值。
输出:
[src/main.rs:6] clamp_round(5 + 5, -10..10) = -10
[src/main.rs:7] clamp_round(5 + 20, -10..10) = 5
[src/main.rs:8] clamp_round(-10 + -1, -10..10) = 9
[src/main.rs:9] clamp_round(5 + 5, 100..110) = 100
[src/main.rs:10] clamp_round(5 + 20, 100..110) = 105
[src/main.rs:11] clamp_round(-10 + -1, 100..110) = 109https://stackoverflow.com/questions/72504472
复制相似问题