初级C++:奇怪的行为
Beginner C++: Strange Behaviour
感谢您花时间阅读此问题!
这个程序是找出十亿之后最小的素数。在int main()的末尾,我包含了一个控制台输入cin>>x;
,目的是防止命令提示符关闭得太快,这样我就可以看到结果。然而,我意识到我必须先输入一些内容,然后它才能显示我想要的结果。
所以问题是:即使控制台输出语句cout<<i;
在输入语句cin>>x;
之前,为什么会出现这种情况?
#include <iostream>
#include <math.h>
using namespace std;
int is_prime(int x);
int main()
{
for (int i=100000000;;i++){
if(is_prime(i)){
cout<<i;
break;}
int x;
cin>>x;
}
}
int is_prime(int x)
{
double maxvalue = sqrt(static_cast<double>(x));
for ( int i=2;i<=maxvalue;i++){
if (x%i == 0 ) return false; }
return true;
}
似乎cin>>x在for循环中。因此,循环的每一次迭代,您都会尝试从流中读取一些内容。所以,在i变成素数之前,你需要输入一些数字。
编辑:显然,1000003是素数,所以你不必输入很多数字。
为什么即使控制台输出语句
cout<<i;
在输入语句cin>>x;
之前也是如此?
因为break
改变了执行顺序,一旦找到素数,就让控制跳过cin >> x
。您需要将cin >> x
移出循环。
你可以做几件事来优化事情:与其试图除以1
到sqrt(N)
的每一个数字,不如只除以迄今为止找到的素数。这会大大加快速度。您也可以使用i*i < x
作为退出条件来放弃对sqrt
的调用。
相关文章:
- C++初级读本5版1.23从文件流中读取
- C++ 初级面试问题:仅使用字符指针压缩字符序列的功能
- C++数组(初级)
- 关于Qt的初级问题
- 为什么这段代码不能运行?[初级]
- C++初级读本第五版字符串练习,要求两段不同的代码提供相同的输出
- C++初级读本(第5版)和C++14
- (初级)关于继承C++
- 关于vim的初级问题
- C++初级"while"课程
- C++初级读本+第6章练习2输入理解
- C++初级读本计数错误
- 作为一名初级程序员,我该如何开始制作桌面应用程序
- c++初级读本第3章练习3.20矢量过流
- 关于C++初级读本第五版中指针的一些问题
- 初级C++-解释类定义
- C++中的编译错误(初级)
- 初级C++硬件.函数似乎不起作用
- 顺序容器||C++初级读本第五版练习9.22
- C++中的初级多项式程序