gpt4 book ai didi

modulo - 当我的数字从 1 而不是零开始时,如何取模?

转载 作者:行者123 更新时间:2023-12-03 10:11:53 27 4
gpt4 key购买 nike

我想这个的解决方案很简单,但我已经考虑了一段时间,无法想出一个优雅的解决方案。

我有一系列数字,例如1..10 = (1,2,3,4,5,6,7,8,9,10) ,这是圆形,意味着最后一个之后的数字再次是第一个( next(10)=1 )。

对于给定的数字 i>0在范围内,我想计算下m -th 和以前的 m -th 号码。例如next(5,1)=6 next(10,1)=1 next(10,2)=2 prev(5,2)=3 prev(1,1)=10 prev(1,2)=9 .

对于 next我可以拿(i+m)%n哪里n是范围的长度(示例中为 n=10)。但是对于 prev我找不到优雅的解决方案。

最佳答案

只需减1,然后加1。

在大多数编程语言中,您在查找“前一个”值时需要注意,因为对于负数,模在这种情况下无法按您的意愿工作:它返回一个负数。

这是 C/C++ 版本:

int next(int i, int m, int n) { return (i + m - 1) % n + 1; }
int prev(int i, int m, int n) { return (i - m + n - 1) % n + 1; }

然而,在 Perl 中取模总是返回一个正值(至少当第二个操作数是一个正整数时)。基本上它做你想做的。因此,您可以编写以下内容并省略 + $_[2] :
sub nxt { ($_[0] + $_[1] - 1) % $_[2] + 1; }
sub prv { ($_[0] - $_[1] - 1) % $_[2] + 1; }

关于modulo - 当我的数字从 1 而不是零开始时,如何取模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3803331/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com