10000的阶乘是多少

我们首先要明确123*9如何算?

3*9=27,进位2,数值为7
2*9=18,18+进位2=20, 故进位2,数值0
1*9=9,9+2=11,数值11
故答案为1107

主要思想
a*b:
我们将a的各个位数保存在数组中,然后分别乘以b,在加以进位运算即可。

比如123*21,保存到数组中an[1]=3,an[2]=2,an[3]=1,
先从个位开始乘,即an[1]*21=63,进位6,数值3,操作为an[1]=3,
an[2]*21=42,42+进位6=48, 故进位4,数值8,操作为an[2]=8,
an[3]*21=21,21+进位4=25,数值为25,操作为an[3]=5,an[4]=2
故最终为2583
#include
int main(void)
{
	int n;
	n=11;
	int ans[10000]={0};//答案保存时,位数低的在左边 
	int size=1;//乘到现在,有几位数 
	int bit=0;//进位的数
	ans[1]=1; 
	for(int i=2;i<=n;i++)//阶乘到n 
	{
		for(int j=1;j<=size;j++)//每个新数i乘以当前答案 ,乘的顺序 个 十 百 
		{
			int tep=ans[j]*i+bit; 
			bit=tep/10; //进位的值
			ans[j]=tep%10; //要保存的数值
		}
		while(bit)  //更新位数的同时将进位保存
		{
			ans[++size]=bit%10;
			bit/=10;
		}
	}
	for(int i=size;i>=1;i--)//输出
	{
		printf("%d",ans[i]);
	}
	printf("\n");
 } 

参考

你可能感兴趣的:(算法)