C++ : 为什么必须添加布尔表达式?

C++ : Why do I have to add a boolean expression?

本文关键字:添加 布尔表达式 为什么 C++      更新时间:2023-10-16

代码是:

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;
}