xtu oj 1150 n!进制 2.0

题目描述

n!进制是指每i位的权值是(i+1)!,每一位的系数为0~i+1。 比如n!进制的21 = 2*2! + 1*1! = 5。给你一个10进制数,求其n!进制的值。

输入

每行一个10进制的整数n,0≤n≤3,628,799。

输出

每行输出一个样例的结果。

样例输入
0
1
10
100
3628799

样例输出
0
1
120
4020
987654321

AC代码

#include
int a[20]={};
void init(){
	int i;
	a[1]=1;
	for(i=2;i<20;i++){
		a[i]=a[i-1]*i;
	}
}
int main(){
	int n;
	init();
	while(scanf("%d",&n)!=EOF){
	   if(n<0)break;
	   else if(n==0)printf("0\n");
	   else if(n==1)printf("1\n");
	   else{
	   int i,j=1,max=0,t=0;
	   while(a[j]<=n){
	   	j++;
	   }
	   max=j-1;
	   for(i=max;i>0;i--){
	   	 t=n/a[i];
	   	 printf("%d",t);
	   	 n%=a[i];
	   }
	   printf("\n");
      }
	}
}

利用递归思想求阶乘,Output Limit Exceed输入没有终止,输入中采用!=EOF

你可能感兴趣的:(算法,c#,c语言)