我的代碼在這,應該不算太長吧?(<一邊加速一邊縮小的白癡)
#include <stdio.h>
static inline size_t carry(unsigned int mins[])
{
size_t i=0;
while (++mins[i]>9)
{
mins[i]=0;
++i;
}
return i;
}
int main()
{
unsigned int min,max,mins[16]={0},pros[16]={1,1,1,1,1,1,1,1,1,1};
scanf("%u%u",&min,&max);
size_t l=0;
pros[0]=0;
if(min==0)
{
putchar('0');
if(++min>max)return 0;
}
for(unsigned int temp=min;temp>0;temp/=10)
{
mins[l]=temp%10;
++l;
for(size_t i=1;i<10;++i){pros[i]*=i;}
}
char output=0;
while(1)
{
unsigned int sum=0;
for(size_t i=0;i<l;++i)
{
sum+=pros[mins[i]];
}
if(sum==min)
{
putchar(' ');
for(size_t i=l;i>0;--i)
{
putchar((char)mins[i-1]+'0');
}
output=1;
}
if (min++>=max)break;
if(carry(mins)>=l)
{
++l;
for(size_t i=1;i<10;++i){pros[i]*=i;}
}
}
if(output==0)printf("none");
return 0;
}