问题描述
我正在编写一个程序来计算 100 的阶乘。代码如下。尽管如此,由于答案太大,输出为 0。是否有任何答案可以显示确切答案?这是因为即使是 unsigned long long 也无法显示 100 的阶乘。谢谢。
#include <iostream>
using namespace std;
int main()
{
int n,i,fact=1;
cout << "enter the number "<<endl;
cin>>n;
for(i=1;i<=n;i++)
{
fact=fact*i;
}
cout<<"the factorial is "<<fact<<endl;
}
解决方法
这是一个相当简单的任务。我们可以像在一张纸上那样做。我们使用 rect
的数字来保存数字。因为结果对于 22! 的 std::vector
来说已经太大了。
答案将是准确的。
采用这种方法,计算很简单。我什至不知道要进一步解释什么。
请看代码:
unsigned long long
使用 Microsoft Visual Studio Community 2019 版本 16.8.2 进行开发和测试。
另外用clang11.0和gcc10.2编译和测试
语言:C++17
,您可以使用 C++ Boost 库来处理如此大的数字。
代码如下:
#include <bits/stdc++.h>
#include <boost/multiprecision/cpp_int.hpp>
using namespace std;
using namespace boost::multiprecision;
cpp_int fact(int);
int main(){
cpp_int a=1;
int n;
cin>>n;
cout<<fact(n)<<endl;
}
cpp_int fact(int x){
if(x==1)
return 1;
cpp_int temp=1;
temp= x*fact(x-1);
return temp;
}