如何在 C++ 中计算模数?

发布于 2024-08-27 18:26:55 字数 30 浏览 7 评论 0原文

如何在 C++ 中执行两个整数之间的取模运算?

How do I perform a mod operation between two integers in C++?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

强辩 2024-09-03 18:26:55

C++ 有 % 运算符,有时会被误导性地命名为“模数”运算符。特别是,STL 在 标头中具有modulus<> 函子。请注意,这不是数学模数运算符,因为在模算术中,根据定义,对于任何 a 值和任何正值,a mod b 的计算结果都是非负值b。在 C++ 中,如果任一参数为负,则 a % b 结果的符号是实现定义的。因此,我们更恰当地将 % 运算符命名为 remainder 运算符。

也就是说,如果您确实想要数学模运算符,那么您可以定义一个函数来执行此操作:

template<typename V>
V mod(const V& a, const V& b)
{
    return (a % b + b) % b;
}

只要 b 是正值,对上述函数的调用将产生非负结果。

C++ has the % operator, occasionally and misleadingly named "the modulus" operator. In particular the STL has the modulus<> functor in the <functional> header. That's not the mathematical modulus operator, mind you, because in modulus arithmetics a mod b by definition evaluates to a non-negative value for any value of a and any positive value of b. In C++ the sign of the result of a % b is implementation-defined if either of the arguments is negative. So, we would more appropriately name the % operator the remainder operator.

That said, if you truly want the mathematical modulus operator then you can define a function to do just that:

template<typename V>
V mod(const V& a, const V& b)
{
    return (a % b + b) % b;
}

So long as b is a positive value a call to the above function will yield a non-negative result.

半山落雨半山空 2024-09-03 18:26:55

在 C++ 中,使用 % 运算符

更多帮助

In c++, use % operator

More Help

浮生面具三千个 2024-09-03 18:26:55

正如其他答案所述,您可以使用 C++ % 运算符。但请注意,还有一个问题尚未有人提及:在表达式 a % b 中,如果 a 为负怎么办?
该操作的结果应该是正数还是负数? C++ 标准将其留给
执行。因此,如果您想便携地处理负输入,您可能应该
执行类似 r = abs(a) % b 的操作,然后修复 r 的符号以满足您的要求。

As the other answers have stated, you can use the C++ % operator. But be aware that there's a wrinkle no one has mentioned yet: in the expression a % b, what if a is negative?
Should the result of this operation be positive or negative? The C++ standard leaves this up to the
implementation. So if you want to handle negative inputs portably, you should probably
do something like r = abs(a) % b, then fix up the sign of r to match your requirements.

一念一轮回 2024-09-03 18:26:55

像这样:
x=y%z

Like this:
x=y%z

¢好甜 2024-09-03 18:26:55

使用模 % 运算符:

int modulus_a_b = a % b;

Using the modulus % operator :

int modulus_a_b = a % b;
霊感 2024-09-03 18:26:55

如果你使用双变量,你应该使用;

double x;
double y;
double result = fmod(x, y);

if you use double variable, you should use;

double x;
double y;
double result = fmod(x, y);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文