C++ 利用恒等式进行减法时的模

C++ 利用恒等式进行减法时的模,c++,mod,C++,Mod,在各种模恒等式中,减法恒等式表示: (a - b) % c = (a % c - b % c) % c 但是如果我看一看这个例子,其中a=508,b=201和c=101,我用这个恒等式得到的答案是否定的,这是不正确的。在C++中,我的程序使用了大量的阶乘(不是从1开始,而是从用户给定的输入到另一个数)模 10 ^ 9 + 7 < /代码>减去另一阶乘数(小于第一个值)mod 10 ^ 9 +7 < /COD>但我得到负值,或者在使用未签名的长long时溢出。 是否有任何可能的实现来获得正确的

在各种模恒等式中,减法恒等式表示:

(a - b) % c = (a % c - b % c) % c
但是如果我看一看这个例子,其中a=508,b=201和c=101,我用这个恒等式得到的答案是否定的,这是不正确的。在C++中,我的程序使用了大量的阶乘(不是从1开始,而是从用户给定的输入到另一个数)模<代码> 10 ^ 9 + 7 < /代码>减去另一阶乘数(小于第一个值)mod <代码> 10 ^ 9 +7 < /COD>但我得到负值,或者在使用未签名的长long时溢出。
是否有任何可能的实现来获得正确的输出?

是。我想应该是这样的

((a%c-b%c)%c+c)%c

如果
a=12
b=7
c=10
,则
(a%c-b%c)%c
将给出-5
再加上<代码> C++ >代码>,再次得到5,这是正确的答案< /p>什么功能用代码> $< /代码>?在互联网上搜索“StaskOffic C++ + MOD大数”。以文本形式发布,无屏幕快照。屏幕快照很难粘贴到IDE中,因此我们可以尝试复制您的问题。$是latex格式。如果
a
b
c
都是正值(或者零,对于
a
b
),您希望避免
(a%c-b%c)%c的负值,然后只需在减法中添加另一个
c
,即
(c+a%c-b%c)%c
。如果
a
b
c
中的任何一个为负值,这并不总是有效的。