如何是小阶乘的话,可以使用这个算法:
#include<stdio.h>
int main()
{
int n;
int i;
int sum;
printf("请输入阶乘:");
scanf("%d",&n);
printf("请输入要换算的进制:");
scanf("%d",&i);
sum=fun(n);
printf("阶乘为:%d\n",sum);
fun1(sum,i);
return 0;
}
int fun(int n)
{
if(n==1)
return 1;
else
return n*fun(n-1);
}
int fun1(int n,int i)
{
int count=0;
int j=-1;
int a[1280]={0};
while(n!=0)
{
a[++j]=n%i;
n=n/i;
}
printf("%d进制为:",i);
for(j;j>=0;j--)
{ printf("%d",a[j]);
count++;
if(count%4==0)
printf(" ");
if(a[j]!=0)
count=0;
}
printf("一共有%d个0\n:",count);
}
根据规律,看1-30里面含有多少3的倍数,3,6,12,15,21,24,30 每个数含有1个3, 9,18,还有2个3, 27 还有3个3 ,一共14个3。 因为进制相当与乘除