今天做题,遇到大整数累加遇到 modulo 的问题,想请教一下大家,题目说 Return the number of possible ways modulo 10^9 + 7 to roll the dice so the sum of the face up numbers equals target.
我尝试了两种方案:
m = (int)1e9 + 7;
//1
for(int n = 1; n <= f && n <= j; n++) {
dp[i][j] += dp[i - 1][j - n] % m;
}
//2
for(int n = 1; n <= f && n <= j; n++) {
dp[i][j] += dp[i - 1][j - n];
dp[i][j] %= m;
}
第一种的结果是错的,第二种的结果是对的。实在是不懂,modulo 操作的顺序会怎么改变数值呢?对于多个数累加,到底要在哪一步 modulo 操作才是对的呢?有没有什么范式之类的?
谢谢大家!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.