首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在特定范围内循环一个整数的最小锈蚀方法

在特定范围内循环一个整数的最小锈蚀方法
EN

Stack Overflow用户
提问于 2022-06-05 02:58:01
回答 1查看 78关注 0票数 1

给定一个范围内的N和一个偏移量O中的数字,什么是最简单的方法(较少的代码)来在R中绕过N + O

同时假定NRminmaxO整数。

例如:

案例1

代码语言:javascript
复制
N = 5
R = [-10, 10)
O = 5

Answer = -10

案例2

代码语言:javascript
复制
N = 5
R = [-10, 10)
O = 20

Answer = 5

案例3

代码语言:javascript
复制
N = -10
R = [-10, 10)
O = -1

Answer = 9
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-05 03:48:52

有一种方法:

代码语言:javascript
复制
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以我们想要的方式处理负值。

输出:

代码语言:javascript
复制
[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) = 109

游乐场

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72504472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档