虽然在 c++ 中循环任务

While loop task in c++

本文关键字:循环 任务 c++      更新时间:2023-10-16

我是 c++ 的初学者,我在使这段代码按照我想要的方式工作时遇到了问题。任务是编写一个程序,将所有自然数乘以加载的数字 n。

为了使它打印正确的结果,我将x除以n(见下面的代码(。如何让它打印x而不必除以n才能得到正确答案?

#include<iostream>
using namespace std;
int main(){
    int n,x=1;
    int i=0;
    cout<<"Enter a number bigger than 0:"<<endl;
    cin>>n;
    while(i<n){
        i++;
        x=i*x;  
    };
    cout<<"The result is: "<<x/n<<endl;
    return 0;
}

一开始,你最好尽快习惯一个原则:始终检查用户输入的正确性!

cin >> n;
if(cin && n > 0)
{
    // valid
}
else
{
    // appropriate error handling
}

不确定,为什么需要 while 循环?在这种情况下,for 循环肯定更好:

int x = 1;
for(int i = 2; i < n; ++i)
   x *= i;

如果您仍然想要 while 循环:从 i == 2 开始(无论如何 1 是中性的(,然后递增:

i = 2;
while(i < n)
{
    x *= i;
    ++i;
}

n == 1的情况下,循环(任一变体(根本不会进入,你很好......

你已经有两个非常好的选择,但当你在编程中足够轻松时,你可能想看看另一个:

unsigned factorial(unsigned value)
{
    if (value <= 1) 
    {
        return 1;
    }
    else
    {
        return value * factorial(value - 1);
    }
}

这是一个递归函数,在适当的时候使用时很整洁(不幸的是,这里的情况并非如此,因为执行堆栈可能会变得如此之大,以至于在完成之前填满了内存。但是您可以查看它以了解有关递归函数的更多信息(

当您的内存已满时,您的应用程序就会崩溃,实际上称为堆栈溢出。

我怎样才能做到在最后cout我只能输入 x,而不必将 x 除以 n 才能得到正确答案?

最好使用for循环。

// This stops when i reaches n. 
// That means, n is not multiplied to the result when the loop breaks.
for (int i = 1; i < n; ++i )
{
   x *= i;
}
cout << "The result is: " << x <<endl;