2 回答
TA贡献1772条经验 获得超6个赞
我相信这段代码有很多问题。
首先,不需要z = x * y在循环内部计算,因为每次但最后一次迭代都会覆盖该值。因此,您的代码实际上与以下内容相同:
heatTheUniverseForSomeTime();
int z = n*n;
这意味着输出z相同的事实实际上几乎没有说明循环是如何工作的。
其次int是没有足够大的类型来保存 的值100000*100000。这就是为什么你有1410065408而不是更多的期望10000000000。long会有所帮助(但请注意,您也应该将至少一个论点long放在右边!)。如果您需要更大的值,请考虑BigInteger.
for第三点是,您的第一个示例可以通过使用循环以更常见且因此易于理解的形式重写,如下所示:
for(int x = 0; x <= n; x++) {
for(int y = 0; y <= n; y++) {
z = x * y;
}
}
这段代码显然需要n*n总共运行迭代。
我也相信现在第 1 点变得更加清晰。
最后,您的第二个代码在两个不同方面不等同于此:
正如所指出的,你永远不会重置,y所以在第一次内部运行循环运行后它永远不会再次运行
此外,由于您x++;在内循环中也是如此,这意味着它始终保持x == y,因此外循环也永远不会在第一次迭代后运行。
您的第二个代码实际上与
for(int x = 0, y = 0; y <= n && x <= n; x++, y++) {
z = x * y;
}
这段代码显然只需要运行n几次,而不是n*n要快得多。
TA贡献1853条经验 获得超6个赞
在第一个循环中,y总是将值分配给zeroevery iteration,这使得它需要更多的时间和步骤才能达到n,而在第二个循环中,y不会重置为,zero因此它可以更快地达到 n 并且步骤更少。
循环1
while (x <= n) {
int y = 0;
循环2
while (x <= n) {
while (y <= n) {
z = x * y;
x++;
y++;
}
添加回答
举报