C++ : 为什么必须添加布尔表达式?
C++ : Why do I have to add a boolean expression?
代码是:
int main() {
int n, largest = 1;
cout << "enter :" << endl;
cin >> n;
int i = n - 1;
while(i > 0) {
if (n % i == 0){
largest = i;
}
i--;
}
cout << largest << endl;
system("pause");
return 0;
}
为什么会发生这些错误?这段代码不断出错,我的教授说我应该添加一个布尔表达式。但我不知道为什么以及在哪里必须添加它?
(灵感来自Alexandrescu的CppCon 2019演讲(
回想一下,循环上的控制检查是不必要的 - 我们知道任何 X 的X % 1
都是 0。此外,根据 Alexandrescu 对无限循环的承诺,我们可以将循环重写如下(它将有一个额外的好处,使其正确,但也将提高它的性能(:
if (n <= 1) {
return;
}
largest = n - 1;
for (;; --largest) {
if (n % largest == 0)
break;
}
// Here largest is usable
重写此循环
while( i > 0){
if ( n % i == 0){
largest = i;
}
i --;
}
例如像
while( i > 0 && n % i != 0 ) i--;
if ( i ) largest = i;
此外,您应该使用无符号 int 类型代替 int 类型。否则,用户可以输入负数。在这种情况下,循环没有意义。
使用您的方法,程序可以通过以下方式查找例如
#include <iostream>
int main()
{
unsigned int n = 0, largest = 1;
std::cout << "enter a non-negative number: ";
std::cin >> n;
if ( n != 0 )
{
unsigned int i = n - 1;
while ( i > 0 && n % i != 0 ) i--;
if ( i ) largest = i;
}
std::cout << "The largest own divisor is " << largest << std::endl;
return 0;
}
相关文章:
- 提升精神:解析布尔表达式并简化为规范范式
- C++ : 为什么必须添加布尔表达式?
- 我的作业问题:布尔表达式
- 是否可以定义以后可以计算的布尔表达式
- 布尔表达式的值是什么
- 布尔表达式的奇怪评估
- 布尔表达式是否像使用 if 或 switch 进行分支一样繁琐?
- 无限模板递归,因为没有布尔表达式优化,只有 gcc
- 是否有任何合理的场景,程序员可能希望避免布尔表达式的短路计算
- 注 961:违反 MISRA 2004 咨询规则 12.6,运算符所需的布尔表达式:"!"
- 使用提升的布尔表达式
- 在C++上给定布尔表达式的情况下分配整数值
- 布尔表达式的精神解析器
- 多个布尔表达式,而不重新插入变量
- C++ 循环和布尔表达式
- 编写布尔表达式以判断列表是否在增加
- 布尔表达式习语中的字符串文字是什么
- 布尔表达式在C++中解析和计算
- 布尔表达式中带有 strlen() 的奇怪行为
- 在C++中添加布尔表达式切换语句