📄 大数阶乘.cpp
字号:
#include<iostream>
#include<vector>
#include<string>
using namespace std ;
vector<int> result ;//定义一个全局的向量容器
void process( const int index,vector<int> & result) ; //声明核心函数
int cnt=1 ;//cnt 来纪录结果有多少位数
void main (void)
{
int index=0 ;
int input =0 ;
cout<<"请输入你要计算的阶乘数"<<endl ;
cin>>input ; //要求输入要计算的阶乘数
while (input <= 0 )//如果不合里就重新输入
{
cout<<"请输入合理的数据,谢谢:\n";
cin>>input ;
}
result.push_back(1) ;//对向量容器进行第0位初始化
for (index=1;index<=input ;++index)
{
process(index,result); //利用循环来求得n!
}
cout<<"结果是"<<cnt<<"位数"<<endl;
for(int i=cnt-1; i>=0; i--) //倒序输出向量容器里的结果
cout<<result[i] ;
cout<<endl;
}
void process(const int index ,vector<int>& result )
{
int product=0 ;
int carry=0 ;
int remainder =0;
int i=0;
//result 里存的是前(index-1)!,共有 cnt 位数
for (i=0; i<cnt; ++i)
{
product = result[i] * index + carry;
carry = product / 10;//向 i+1位进的数
remainder = product % 10; //乘以index后,得到的i位的数
result[i] = remainder;
}
//当最后一位计算完后,有可能有进位 ,如果有则向量容器将进位入栈 ;
if (carry != 0)
{
while (carry / 10 != 0)
{
result.push_back (carry % 10);
carry /= 10;
++cnt;
}
result.push_back( carry) ;
cnt++ ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -