大数阶乘
来源:互联网 发布:罗马 拜占庭 知乎 编辑:程序博客网 时间:2024/06/05 03:53
把用数组每一个元素表示结果的每一位,下标越低表示位数越低。按照阶乘定义把从2~N每一个数相乘,按照乘法定义两个数相乘就是把其中一个数乘以另一个数每一位,加上进位。这就是两层循环的意思。
#include <stdio.h>SWWQWERARR#define N 3000void factorial(int num,int *arr,int n){ arr[0]=1; int i,j; for(i=2;i<=num;i++) { int c=0; int tmp; for(j=0;j<n;j++) { tmp=arr[j]*i+c; arr[j]=tmp%10; c=tmp/10; } }}int main(){ int arr[N]={0}; int i; int num; scanf("%d",&num); factorial(num,arr,N); for(i=N-1;arr[i]==0;i--); printf("i: %d\n",i); for(;i>=0;i--) printf("%d",arr[i]); return 0;}
0 1