呃……今天学习了大数阶乘的求法
代码如下
#include<iostream>
using namespace std;
int main()
{
int c[20001];
int di=1;//位数初始为一;
c[0]=1;
int num=0;//进位初始为0;
int n=1000;//求n!,求1000!
for(int i=2;i<=n;i++)//从1成到n
{
num=0;
for (int j=0;j<di;j++)//每一位乘i
{
num=c[j]*i+num;
c[j]=num%10; //取个位
num=num/10; //获取进位。
}
while(num)//如有进位
{
c[di]=num%10;
num=num/10;
di++;
}
}
for(int i=di-1;i>=0;i--)//倒序输出数组c
{
cout<<c[i];
}
return 0;
}
具体操作不说,这里只谈思想。我在学习之后发现其中对大数的处理采取了这样的策略。
- 分离数位:把一个大数的每一位分离出来,存入一个数组中。
- 模拟运算:模拟数在运行时的的进位等操作。
倒序输出。
按着这些思想,意味着我们可以模拟出其他的大数运算。
像大数加,减,乘,除,之类的。