當前位置:成語大全網 - 新華字典 - C語言關於自守數的字典序輸出

C語言關於自守數的字典序輸出

#include<stdio.h>

long?Re0(long?a);

int?Fact(int?a);

main()

{

long?array[1000];

char?str[1000][1000];

char?t[1000];

int?m?=?0;

int?k?=?0;

int?j;

long?p=0,chino,i,guess;

scanf("%ld",&chino);

for(i=1;i<=chino;i++)

{

guess=Re0(i);

if(guess==i)

{

array[k++]?=?i;

}

}

for(i?=?0;?i?<k?;i++)

{

sprintf(str[i],"%d",array[i]);

}

?for?(i?=?0;?i?<?k?-?1;?i++)?//將字符串排序

{

for?(j?=?0;?j?<?k?-?1?-?i;j++)

if?(strcmp(str[j],?str[j?+?1])?>?0)

{

strcpy(t,?str[j]);

strcpy(str[j],?str[j?+?1]);

strcpy(str[j+1],?t);

}

}

for?(i?=?0;?i?<?k;?i++)?//輸出

{

if(i?==?k-1)

printf("%s",str[i]);

else

printf("%s?",str[i]);

}

}

int?Fact(int?a)

{

if(a==0||a==1)

return?1;

else?if(a>1)

return?a*Fact(a-1);

}

long?Re0(long?a) //計算各個位數之和

{

long?sum;

int?A,B,C,D,E; //分別為個位、十位、百位、千位、萬位

if(a<10)

return?Fact(a);

else?if(a>=10&&a<100)

{

A=a%10;

B=a/10;

sum=Fact(A)+Fact(B);

return?sum;

}

else?if(a>=100&&a<1000)

{

A=a%10;

B=a%100/10;

C=a/100;

sum=Fact(A)+Fact(B)+Fact(C);

return?sum;

}

else?if(a>=1000&&a<10000)

{

A=a%10;

B=a%100/10;

C=a%1000/100;

D=a/1000;

sum=Fact(A)+Fact(B)+Fact(C)+Fact(D);

return?sum;

}

else?if(a>=10000&&a<100000)

{

A=a%10;

B=a%100/10;

C=a%1000/100;

D=a%10000/1000;

E=a/10000;

sum=Fact(A)+Fact(B)+Fact(C)+Fact(D)+Fact(E);

return?sum;

}

}