求大数据n的阶乘,当n(n<20)很小时,可以直接用简单的for循环或者递归的方法来实现,但是当数据很大时,比如n=1000,n=10000时,如果再采取这种方法,整形数据就会溢出了,这种方法就显得太暴力了。
解决方法一:用数组的方式来存储每一位数据。
解决方法二:用字符串的方式来存储每一位数据。
方法一:(数组)
#include <iostream>
#include <cstdio>
#define MAX 40000
using namespace std;
int main(void)
{
int n;
while(scanf("%d",&n)!=EOF&&n>=0)
{
int i,j;
int a[MAX]; //存数运算结果
int p,h; //p存储当前结果的位数,h为进位
a[1]=1;
p=1;
for(i=2;i<=n;i++) //循环与2,3,4.....n相乘
{
for(j=1,h=0;j<=p;j++) //让a[]的每位与i相乘
{
a[j] = a[j] * i + h ;
h = a[j] / 10 ;
a[j] = a[j] % 10 ;
}
while(h>0) //如果h不为0
{
a[j] = h % 10 ;
h = h / 10 ;
j++;
}
p = j - 1 ; //将当前的位数赋给p
}
for(i=p;i>=2;i--)
{
printf("%d",a[i]);
}
printf("%d\n",a[i]);
}
return 0;
}