如何仅用for循环计算从2开始的前16个2的倍数的乘积?求优化方案
优化实现方案
你的代码存在两个明显问题:
- 手动计算乘积极易出错,比如你写的
b=2*4*6*10*12*14*16*18*20*22*24*26*28*30*32里漏掉了8,直接导致乘积结果错误 - 扩展性极差,如果后续需要计算前N个2的倍数的乘积,必须重新手动计算,效率极低
下面是仅用for循环的最优实现,循环内同时完成序列输出和乘积累积,无需手动计算:
public class Program30 { public static void main(String args[]) { long product = 1; // 使用long类型避免整数溢出 for (int x = 1; x <= 16; x++) { int num = 2 * x; System.out.print(num + " "); product *= num; // 循环中自动累积乘积 } System.out.println("\nThe product is " + product); } }
关键说明:
- 避免溢出:前16个2的倍数的乘积是
2×4×6×…×32 = 2^16 × 16!,结果为1374389534720000,远大于int类型的最大值(2147483647),因此必须用long类型存储乘积 - 移除无用代码:原代码中的
Scanner未被使用,可以直接删除 - 逻辑统一:通过一次for循环同时完成序列生成、输出和乘积计算,代码简洁且不易出错
内容的提问来源于stack exchange,提问作者Gorilla1
相关产品推荐
相关产品推荐

