题目描述
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<stdio.h>
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