小编ren*_*nts的帖子

乘法发生溢出

long m = 24 * 60 * 60 * 1000 * 1000;
Run Code Online (Sandbox Code Playgroud)

上面的代码创建溢出并且不会打印正确的结果.

long m2 = 24L * 60 * 60 * 1000 * 1000;
long m3 = 24 * 60 * 60 * 1000 * 1000L;
Run Code Online (Sandbox Code Playgroud)

以上2行打印正确的结果.

我的问题是 -

  1. 对我使用的编译器有用,m2还是m3
  2. java如何开始倍增?从左到右还是从右到左?24*60是先计算还是1000*1000计算?

java integer-overflow multiplication

17
推荐指数
4
解决办法
1399
查看次数

解释约瑟夫斯概率的递归实现

编辑:n是人数.k是被淘汰的第k个人.所以对于k = 2,每个第二个人都被淘汰了.

int josephus(int n, int k)
{
 if (n == 1)
  return 1;
else
   return (josephus(n - 1, k) + k-1) % n + 1;
}
Run Code Online (Sandbox Code Playgroud)

代码尽可能简单.但不知怎的,我无法理解这个问题(说实话有点尴尬).

我试图理解它的方式是,

  1. josephus(n,k)给出了大小为n且步长为k的总体的最终解.
  2. 如果我们知道josephus(n-1,k)的解,可以计算约瑟夫(n,k).在我看来,这是动态规划的"最优子结构属性".
  3. 我得到了我们需要做一个MOD N,以便在数字超过n的情况下,它将再次从1开始计数.(即确保加法的行为类似于我们在圆圈中计算).但为什么我们加上这个"k-1"呢?

主要的问题是,如果我们知道约瑟夫斯(n-1,k)的正确解,我们如何计算约瑟芬(n,k)的解.我们已经有效地向人群添加了一个人,并且以某种方式添加这个k-1值给了我正确的解决方案(让我们暂时忽略mod).

任何人都可以向我解释一下,在问题的每一步中,最佳子结构属性如何保持?

algorithm josephus

14
推荐指数
1
解决办法
3412
查看次数

Java Executor 框架实现了什么设计模式?

我的理解是它看起来与抽象工厂非常相似。

笔记:

执行器界面:

public interface Executor {
     public void execute();
}
Run Code Online (Sandbox Code Playgroud)

然后是一个Executors包含各种Executor实现的静态工厂的类。

java design-patterns abstract-factory executors

4
推荐指数
1
解决办法
6306
查看次数