C 编程 - 使用溢出的无符号整数之和的模

C Programming - using modulo of a sum of unsigned integers which overflows

我在大学有一项作业,我需要为给定的主程序编写函数。 都在c.

所以,我的问题是我需要使用两个无符号整数之和的模块。

uint32_t mod_add(uint32_t x, uint32_t y, uint32_t n)
{
    uint32_t res;

    res = (x + y) % n;

当 x 和 y 的总和低于 2^32-1 时,这很好用。 我的毛病是当sum超过这个值的时候,明显溢出,取模值不对。

在我的作业中 x = 2^32-3; y =1174501 和 n =2^32-1(n 是模数); 我的结果是1174497,应该是1174499。

任何人有任何想法,如何解决这个问题?

给你。

uint32_t remainder(uint32_t x, uint32_t y, uint32_t d)
{
    uint32_t r1 = x % d;
    uint32_t r2 = y % d;

    return r1 < (d - r2) ? r1 + r2 : r1 - (d - r2);
}

当然,您可以使用任何整数类型代替 uint32_t,例如 unsigned long long