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;
}``
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值