如何在不让u128溢出的前提下,对一个表示整数的字符串取模4?

编程语言 2026-07-11

我正在编写一个函数,该函数接收一个字符串,将其转换为整数,并返回该值除以4 的余数。就这个函数而言,我必须让它能够处理超出将字符串转换为整数时所能表示的无符号128位整数上限的非常长的字符串,尽管我真正关心的值非常小。这是我目前的实现:

fn exponent_function(str: &str) -> u32 {
    let exponent: u32 = match str.parse::<u128>() {
        Ok(n) => (n % 4) as u32,
        Err(e) => panic!("{e}"),
    };
    exponent
}

这对较小的数字有效,但任何超过无符号128位整数上限的数字都会返回解析错误,因为数字太大。有没有办法在不受这个限制的情况下处理该值?我不能使用任何外部包。

解决方案

@phuclv指出

要得到对4 取模的余数,你只需要取最后两位数字的余数。

它在大小上都适用,完全不需要对数字进行解析。实际上,对于模m=2ⁿ 或m=5ⁿ 的N,你将对N 的最后n 位十进制数字取模m。

在十进制表示中,每一位数字都会再附带一个2 × 5的因子。 两位数字会让我们得到一个2 × 2 × 5 × 5的因子,当然其中自然包含了4。 在这之上在千位、万亿位等高位再加上任何数字,也不会改变模运算的问题。 你可以忽略高位数字。 把最低的两位数字转成一个整数,然后进行取模就足够了。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章