#54897: 有沒有高手幫我看看怎樣才能更快?(我覺得我盡力了)


312230@cyvs.tyc.edu.tw ([資訊113戊]鄭丞喆)


我的代碼在這,應該不算太長吧?(<一邊加速一邊縮小的白癡)
 
#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;
}