在C语言中实现模运算符作为函数

在C语言中实现模运算符作为函数,c,operators,modulo,C,Operators,Modulo,我们如何在C语言中实现模运算符作为函数而不使用该运算符?先进行整数除法,然后进行乘法和减法运算 #include <stdio.h> int main() { int c=8, m=3, result=c-(c/m*m); printf("%d\n", result); } #包括 int main() { int c=8,m=3,结果=c-(c/m*m); printf(“%d\n”,结果); } 给你: a % b = a - (b * int(a/b)) 通过从x重

我们如何在C语言中实现模运算符作为函数而不使用该运算符?

先进行整数除法,然后进行乘法和减法运算

#include <stdio.h>
int main()
{
  int c=8, m=3, result=c-(c/m*m);
  printf("%d\n", result);
}
#包括
int main()
{
int c=8,m=3,结果=c-(c/m*m);
printf(“%d\n”,结果);
}
给你:

a % b = a - (b * int(a/b))

通过从
x
重复减去
y
,并跟踪结果,可以模拟
x%y
。在每次迭代中,如果结果小于
y
,则您有余数,只需返回即可。

简单:

如果商
a/b
是可表示的,则表达式
(a/b)*b+a%b
应等于
a


(C99标准,6.5.5/6)。

被除数/除数=商

公式(在Python 3中)如下所示:

Modolus=Divident-被除数//除数*除数

例如,如果被除数=5,除数=2,那么

模数=5-5//2*2,即 5 - 2 * 2 5 - 4 1. 记住//的优先级高于-,所以5//2是
首先,在C++(不包括C的问题中),如果a和b是整数,则是多余的。但是否决票来自其他地方。@JonathanLeffler,你能解释一下这在C语言中不起作用的地方吗@user674669:在C语言中,你必须写
(int)(a/b)
。类型函数符号<代码> int(A/B)< /C>是C++特有的。这对负数无效。5模4应该是
3
,但
-5-((int)(-5/4)*4)
输出
-1
。这并不能直接回答问题,它只是%运算符的公理化定义(因此并不真正“简单”)。我想知道这个投票的票数。@Clifford:可能是因为通过一个明显的转换(从两边减去
(a/b)*b
),它变成了一个确定
a%b
)的公式?@caf:可能,但“简单”应该是呈现“明显”的转换,而不是假设读者拥有(尽管是基本的)转换数学技能。OP的数学能力未知;假设这是显而易见的,可能看起来只是在炫耀。“不使用运算符”aka,不要使用%运算符,aka你的答案使用模运算符,因此你没有回答他的问题,事实上这有点自鸣得意……这不起作用。如果
a=15
b=8
您将正确获得
7
。如果
a=-15
b=8
您将得到
1
。两者都应该是
7
如果计算机没有乘法/除法功能,这可能很慢,但很有用。这不是真正的软件实现的工作方式。真正的软件实现会将第二个操作数加倍,直到再次加倍使其大于第一个操作数,然后开始将第二个操作数除以二并进行减法。
-21
mod
20
=
-1
,但在上述代码中,它应该是
19
。只对正面有效