程序为特定输入提供了错误的输出
program giving wrong output for a specific input
我想检查一个数字是素数。这是我的代码:
#include <iostream>
using namespace std;
int main(){
int num;
int i, k = 0;
cin >> num;
for(i = 2; i < num; i++){
if(num % i == 0){
k = k + 1;
}
}
if(k > 0){
cout << "The number is not prime" << endl;
}else{
cout << "Prime!" << endl;
}
return 0;
}
当我输入6、78,...等时,它给出了正确的输出。但是,当我输入不是素数的4294967296时,它正在返回Prime!
。
那是因为 4294967296
是一个相当特殊的数字。它是2^32
,它是int
的存储容量的限制,通常仅容纳32位。因此,您的num
被解释为0
。
其余的从溢出误解中逻辑上遵循。for
循环永远不会输入,因为2
不少于0
,因此k
永远不会增加。
edit 实际上,在这种特殊情况下,它出于不同的原因失败。std::cin
在输入上执行截断,因此,当您输入4294967296
时,num
实际上将被分配给2147483647
的值。您的程序[正确]打印该值是主要的。只是那不是用户打算测试的数字。
您需要验证输入。4294967296对于32位签名的整数太大,因此std::cin
将其截断为2147483647,实际上是PRIME的。您可以检查将您的电话号码打回屏幕。您还应该将循环更改为:
for(i = 2; i < num / 2; i++)
,它将提供相同的结果,但减少计算时间两次。
相关文章:
- 显示错误输出的简单数组排序程序
- Dijkstra 中的错误输出
- 自定义runtime_error,如果我在 #what 中使用#c_str(),则错误输出始终为空
- 流字符串错误输出
- C++ 异常处理错误输出
- C ++中的错误输出,i = 65530,当我们打印i的值时,它给出-6状态65530
- SSE和iostream:浮点类型的错误输出
- C++将 popen 错误输出读取为字符串
- 部分透视/高斯消除 - 交换列而不是产生错误输出的行
- C++,向量:获得包含 0 的错误输出
- 数组函数错误输出
- CC1plus 错误:输出文件名指定两次
- 字符串错误输出
- 子斯特的错误输出
- 对大量c++错误输出完全一无所知.我认为这与预定义的函数和迭代器有关
- 简单程序的错误输出
- XCode调试器lldb中断,没有错误输出,但程序运行良好
- std::string::append(std::string)错误输出
- 查看大错误输出的顶行
- 使用结构的错误输出