我正在编写一个程序来查找用户输入数字的阶乘。我的程序起作用,除了找到因子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.
答案 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 int
或double
或long 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/
上阅读完整的程序逻辑