如何修改圆周率生成代码使其在第300位处停止输出?
解决Gibbons抽离算法生成π时精准截断到第300位的问题
你的核心问题在于main函数中的循环没有设置终止条件,导致程序无限运行。要精准输出到第300位小数,只需要将循环改为固定执行300次即可——初始化后已经输出了π的整数部分(3)和小数点,后续每一次++g都会生成一位小数,循环300次就能得到300位小数。
修改后的main函数代码
int main() { Gospers g; std::cout << *g << "."; // 输出整数部分和小数点 // 循环300次,生成并输出300位小数 for(int count = 0; count < 300; ++count) { std::cout << *++g; // 生成下一位并输出 } std::cout << std::endl; return 0; }
关键说明
- 原代码中的
for(300;)是无效写法,会被编译器识别为无限循环。替换为带计数器的循环,明确控制执行次数,就能精准截断到第300位。 - Gibbons抽离算法本身是逐位确定性生成π的小数位,只要循环次数准确,就能保证输出的是前300位有效小数,完全不需要依赖时间截断这类不可靠的方法。
内容的提问来源于stack exchange,提问作者user20501708
相关产品推荐
相关产品推荐

