什么数据类型可以存储100的阶乘?
What data type can store a factorial of 100
为什么下面的程序将100的阶乘打印为0作为输入?如果getFact函数返回类型为long double
,则可以计算相同的阶乘,但要获得数字之和,我不能在长双精度上应用mod (%)操作符。
注意: unsigned long long
和long double
的大小在我的机器上是相同的。请建议输入为100,什么类型的数据会给出正确的输出。
#include <iostream>
#include <stdlib.h>
unsigned long long int getFactorial(int);
unsigned long long int getSum(unsigned long long int);
int main()
{
unsigned long long int fact = 1;
unsigned long long int digsum = 0;
std::cout << "Enter a number to find fact := ";
int num;
std::cin >> num;
fact = getFactorial(num);
std::cout << num <<"'s factorial is = " << fact << std::endl;
digsum = getSum(fact);
std::cout << sizeof(unsigned long long int) << std::endl;
std::cout << sizeof(long double) << std:: endl;
std::cout << "Sum of the digits in the number" << num << "! is :=" << digsum << std::endl;
return 0;
}
unsigned long long int getFactorial(int num)
{
if(num == 1)
return 1;
else
return (num * getFactorial(num - 1));
}
unsigned long long int getSum(unsigned long long int fact)
{
if(fact == 0)
return 0;
else
{
int temp = 0;
temp = fact % 10;
return (temp + getSum(fact/10));
}
}
如果你想要一个近似值,你可以使用double。(注意整数算术与双精度算术不同)。您可以使用log
计算或乘法来估计100!
。
但是因为你想要数字的和,你需要精确的结果,你需要一些大的整数库。你可以谷歌大整数
或者你可以把大的数字存储成字符串,然后像我们在学校里学的那样用纸笔来计算(乘积)
使用double代替long long int,就像100!, long long int太短,不能保存结果。
double getFactorial(double num)
{
if (num <= 1)
return 1;
else
return (num * getFactorial(num - 1));
}
与long double
我比较了结果和工作良好,直到25,从有错误。
#include <iostream>
#include <iomanip>
using namespace std;
long double factorial(long double n)
{
if (n<=1)
return 1;
else
{
return n*factorial(n-1);
}
}
int main()
{
long double fact;
for(long double i=0;i<50;i++)
{
fact=factorial(i);
cout<<i<<"!= "<<setprecision(0)<<fixed<<fact<<endl;;
}
return 0;
}
相关文章:
- 在 C++ 中的数组上使用阶乘函数
- 阶乘问题在 c++ 中给出错误的输出
- 大数的阶乘给出错误的输出
- 什么模板用法在阶乘中更好
- 为什么我在C++阶乘函数中出现编译错误?
- 计算阶乘的 C++17 倍表达式中的错误
- 为什么 Lisp 中 1000 阶乘的计算如此之快(并显示正确的结果)?
- 在C++中执行 N 阶乘编译时间的 3 种不同/相同方法
- 平方模型为零,阶乘模型问题
- 阶乘元规划
- 阶乘-c++ 我想以不同的方式打印
- 阶乘函数只返回C++中输入的答案
- 阶乘使用循环递增给出垃圾值
- 大 n 表示阶乘
- 为什么我不能在非常量表达式上使用此模板阶乘函数?
- 计算最大数字的阶乘
- 这个阶乘程序内部发生了什么?
- 返回阶乘C++的递归函数
- 使用指针数组存储阶乘计算的所有中间结果
- 什么数据类型可以存储100的阶乘?