C ++阶乘为0

时间:2014-10-14 19:39:04

标签: c++ logic

我正在编写一个程序来查找用户输入数字的阶乘。我的程序起作用,除了找到因子0之外。要求是0的阶乘应该输出一个,但我想不出一种方法将这种能力写入代码而不创建输入0时的特殊情况。这就是我到目前为止所拥有的

#include <iostream>
#include <cmath>
using namespace std;

int main() {

    int startingNumber = 0;
    double factorialize = NULL;

    while(startingNumber != -1) {
        cout << "Enter the numbr to factorial: ";
        cin >> startingNumber;
        factorialize = startingNumber;
        for(int x=startingNumber-1;x>=1;x--) {
            factorialize = factorialize*x;
        }
        cout << factorialize << endl;
        factorialize = NULL;
    }

    return 0;
}

这为除0以外的所有情况准确输出一个因子。有没有办法做到这一点,不需要特殊情况?我在想不,因为当我读到为什么0的原因时!是1,它说它是这样定义的,换句话说,你不能推理你为什么它是1.就像x ^ 0,0! = 1有一个不同的逻辑,为什么2 ^ 2是4或2为什么! = 2.

4 个答案:

答案 0 :(得分:4)

试试这个:

    factorialize = 1;
    for(int x=2; x<=startingNumber;x++)
        factorialize *= x;

答案 1 :(得分:3)

试试这个:

for (unsigned int n; std::cin >> n; )
{
    unsigned int result = 1;
    for (unsigned int i = 1; i <= n; ++i) { result *= i; }
    std::cout << n << "! = " << result << "\n";
}

您可以稍微更改结果类型(unsigned long long intdoublelong double),但最终您无法在硬件中计算大量因子

答案 2 :(得分:0)

首先,我没有看到如何准确计算它,因为你将startingNumber乘以两次。所以只需修改逻辑:

factorialize = 1.0;
for(int x=startingNumber;x>=1;x--) {
    factorialize = factorialize*x;
}

它应该正确计算阶乘以及正确处理0。 另外,您不应将NULL用作double的初始值,而是用于指针。

答案 3 :(得分:0)

C ++有一个完整的数字因子程序,它包括正数,负数和零因子的设施。

    #include<iostream>
    using namespace std;
    int main()
    {
        int number,factorial=1;
        cout<<"Enter Number to find its Factorial: ";
        cin>>number;
        if(number<0

)
    {
        cout<<"Not Defined.";
    }
    else if (number==0)
    {
        cout<<"The Facorial of 0 is 1.";
    }
    else
    {
      for(int i=1;i<=number;i++)
      {
          factorial=factorial*i;
      }
    cout<<"The Facorial of "<<number<<" is "<<factorial<<endl;
    }
    return 0;
}

您可以在http://www.cppbeginner.com/numbers/how-to-find-factorial-of-number-in-cpp/

上阅读完整的程序逻辑