JavaScript循环问题:如何将0.01执行365次翻倍操作?
解决365次便士翻倍的For循环问题
嘿,我一眼就看出问题出在哪啦!你原来的循环逻辑完全搞反了——你要的是执行365次翻倍操作,但现在的代码是让数值增长到接近365时就停止,这根本不是一回事儿~
为什么原来的代码不行?
咱们算个小账:0.01便士翻倍到超过365英镑只需要大概16次(0.01 * 2^16 = 655.36),所以你的循环执行16次就会因为i < 365不成立而停止,远远达不到365次的要求。
正确的写法:用计数器控制循环次数
你需要一个计数变量来追踪已经执行了多少次翻倍,而不是用当前金额的大小作为循环条件。这里有两种简单的实现方式:
方式一:For循环(更直观)
let currentPenny = 0.01; // 用day变量计数,从0到364,刚好执行365次 for (let day = 0; day < 365; day++) { console.log(`第${day + 1}天的金额:${currentPenny}`); currentPenny *= 2; // 执行翻倍操作 }
注:如果想先翻倍再打印(比如第一天结束后是0.02),可以把currentPenny *= 2放在console.log前面。
方式二:While循环(逻辑同样清晰)
let currentPenny = 0.01; let daysCompleted = 0; while (daysCompleted < 365) { console.log(currentPenny); currentPenny *= 2; daysCompleted++; // 每执行一次翻倍,计数加1 }
额外提醒:数值精度问题
当执行到大概第100次翻倍时,数值会变得极大,超出JavaScript双精度浮点数的精确范围,最终会变成Infinity。但这属于正常现象,因为365次翻倍后的数值本来就是天文数字,已经超出了常规数值的表示范围。
内容的提问来源于stack exchange,提问作者Corina
相关产品推荐
相关产品推荐

