输入一个n,可以算出小于n的水仙花数,并输出总数,奇数的个数,偶数的个数,并询问你想输出偶数还是奇数并输出。
#include<stdio.h>
int sxh(int n,int i);
int issxh (int n);
int main(void)
{
int i,n,sxh,num,choice,indexj,indexo;
int nj[100],no[100];
indexo = indexj = 0;
printf("请输入n,求小于n的水仙花数:");
scanf("%d",&n);
for(i = 100; i <= n; i++)
{
sxh = issxh(i);
if( sxh == -1)
;
else if( sxh % 2 == 0)
no[indexo++] = sxh;
else if(sxh % 2 == 1)
nj[indexj++] = sxh;
}
num = indexj + indexo;
printf("共有%d个水仙花数\n",num);
printf("其中有%d个是奇数%d个是偶数\n",indexj,indexo);
printf("请输入显示奇数还是偶数(1表示奇数,0表示偶数):");
scanf("%d",&choice);
if(choice == 1)
{
printf("其中奇数的水仙花数为:\n");
for(i = 0; i<indexj; i++)
printf("%d ",nj[i]);
}
else if(choice == 0)
{
printf("其中偶数的水仙花数为:\n");
for(i = 0; i<indexo; i++)
printf("%d ",no[i]);
}
}
int issxh (int n)
{
int sum=0,store,i = 0;
for(store = n; n > 0; n /= 10)
i++;
for(n = store; n > 0; n /= 10)
sum += sxh(n % 10,i);
if (sum != store)
sum = -1;
return sum;
}
int sxh(int n,int i)
{
int j,sum = 1;
for (j = 1; j <= i; j++)
sum *= n;
return sum;
}