c语言的21位水仙花数,寻找21位水仙花数 C语言版

这段代码主要涉及数学计算和数组操作。初始化一个10x21的二维数组num,用于存储数学运算结果。通过循环计算每个位置的数值,并处理进位。add函数将一个数m加到总和数组sum中。check函数检查数组a是否与总和数组sum对应元素相等,如果相等则打印sum。find函数使用深度优先搜索的方式遍历所有可能的数列组合,寻找符合条件的数组a。整个程序可能在寻找特定数学问题的解决方案。
摘要由CSDN通过智能技术生成

char num[10][21];

char a[21];

char sum[22];

char x[10];

char y[10];

char

i,j,n,b,temp;

Init()

{for(i=0;i<10;i++)

num[i][0]=1;

for(n=0;n<10;n++)

for(i=0;i<21;i++)

{temp=0;

for(j=0;j<21;j++)

{num[n][j]=num[n][j]*n+temp;

if(num[n][j]>9)

{temp=num[n][j]/10;

num[n][j]%=10;

}

else

temp=0;

}

}

}

add(char m)

{temp=0;

for(j=0;j<21;j++)

{sum[j]=sum[j]+num[m][j]+temp;

if(sum[j]>9)

{temp=sum[j]/10;

sum[j]%=10;

}

else

temp=0;

}

sum[21]=temp;

}

check()

{for(i=0;i<10;i++)

{x[i]=0;

y[i]=0;

}

b=1;

for(i=0;i<21;i++)

{x[a[i]]++;

y[sum[i]]++;

}

for(i=0;i<10;i++)

{if(x[i]!=y[i])

b=0;

}

if(b==1)

{for(i=0;i<21;i++)

printf("%d",sum[20-i]);

printf("\n");

}

}

find()

{for(a[0]=1;a[0]<10;a[0]++)

for(a[1]=0;a[1]<=a[0];a[1]++)

for(a[2]=0;a[2]<=a[1];a[2]++)

for(a[3]=0;a[3]<=a[2];a[3]++)

for(a[4]=0;a[4]<=a[3];a[4]++)

for(a[5]=0;a[5]<=a[4];a[5]++)

for(a[6]=0;a[6]<=a[5];a[6]++)

for(a[7]=0;a[7]<=a[6];a[7]++)

for(a[8]=0;a[8]<=a[7];a[8]++)

for(a[9]=0;a[9]<=a[8];a[9]++)

for(a[10]=0;a[10]<=a[9];a[10]++)

for(a[11]=0;a[11]<=a[10];a[11]++)

for(a[12]=0;a[12]<=a[11];a[12]++)

for(a[13]=0;a[13]<=a[12];a[13]++)

for(a[14]=0;a[14]<=a[13];a[14]++)

for(a[15]=0;a[15]<=a[14];a[15]++)

for(a[16]=0;a[16]<=a[15];a[16]++)

for(a[17]=0;a[17]<=a[16];a[17]++)

for(a[18]=0;a[18]<=a[17];a[18]++)

for(a[19]=0;a[19]<=a[18];a[19]++)

for(a[20]=0;a[20]<=a[19];a[20]++)

{for(i=0;i<22;i++)

sum[i]=0;

for(i=0;i<21;i++)

if(a[i]!=0)

add(a[i]);

else

break;

if(sum[20]!=0

&& sum[21]==0)

check();

}

}

main()

{Init();

find();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值