【发布时间】:2015-04-07 10:34:49
【问题描述】:
我们得到两个整数a 和b、a <= 100000、b < 10^250。我想计算b%a。我找到了这个算法,但不知道它是如何工作的。
int mod(int a, char b[])
{
int r = 0;
int i;
for(i=0;b[i];++i)
{
r=10*r +(b[i] - 48);
r = r % a;
}
return r;
}
请解释这背后的逻辑。我知道模数学的基本性质。
谢谢。
【问题讨论】:
-
这里唯一的幻数是48。它是符号“0”的ASCII码。所以
"0" - 48 == 0;和"1" - 48 == 1;等等。其余的代码由你来理解。 -
@MarkGraph 你的讽刺比你猜的要好。
-
你“找到”的那段代码不带“两个整数,a 和 b”,所以这不是一个很好的开始。
-
@DanielDaranas 我写道,我们有两个整数。我没有说我是如何输入的。在这种情况下,很明显,较大的数字 b 作为字符串输入。
-
他不应该投反对票。他忘了解释 iof
b的值是如何输入的,并假设你反对的人会理解它。这是他唯一搞错的地方。他关于此函数如何计算模 的问题很有趣,并且很容易与高效计算多项式的方式相关联。 Horner's Algorithm
标签: c++ modulus largenumber