c语言计算n的阶乘

问题描述:
输入一个整数n,计算n的阶乘
1<=n<=1000

我们第一印象首先想到的就是用循环来直接计算n的阶乘,可是阶乘的时间复杂度是最高的,也就是说对于数字较大的阶乘我们无法通过直接计算来获得。

那么这么来计算较大数字的阶乘呢

我们可以建立一个数组,将数字的个位,十位…存放在数组中,数字的大小在0~9,这样就完成了对于计算量很大的数字的存储,输出。

那么这么计算呢,其实也很简单,我们只需要将数组中的每一位和1~n相乘就可以了。

#include<stdio.h>
#define N 10000

int c[N];
int m[N];//存储进位
int finish=0;//控制输出
int x;

int main()
{ 
	int n;
	scanf("%d",&n);
	for(int i=1;i<=N;i++){ 
	    if(i==1){ 
	    	c[i] = 1;//个位为一 
		} else{ 
			c[i] = 0;//其余均为0 
		}
	}
	for(int i=1;i<=n;i++){ 
		for(int j=1;j<=N;j++){ 
			c[j] = c[j]*i;
			if(c[j-1]>=10){ //在计算第i个的时候,要将第i-1个判断
				m[j-1] = c[j-1]/10;
				c[j-1] = c[j-1]%10;
				c[j] =  c[j] + m[j-1];
			}
		}
	}
	for(int i=N;i>=1;i--){ 
		if(c[i]!=0){ 
			finish = 1;
			x = i;
			if(finish){ 
				for(int j=x;j>0;j--){ 
					printf("%d",c[j]);
				}
				break;
			}
		}	
	}
	return 0;
}``
    原文作者:wk111111222
    原文地址: https://blog.csdn.net/wk111111222/article/details/104626101
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞