大数阶乘

来源:互联网 发布:罗马 拜占庭 知乎 编辑:程序博客网 时间: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
原创粉丝点击