您的位置:首页 > 其它

水仙花数——升级版

2015-01-22 22:32 92 查看
#include<stdio.h>
#include<math.h>
#define M 7
int sum[10][M];
void pow_1(int m)
{
int i,j,c;
for(i=0;i<10;i++)
for(j=0;j<M;j++)
sum[i][j]=0;
for(i=0;i<10;i++) sum[i][M-1]=pow(i,m);
for(i=2;i<10;i++)
{
c=sum[i][M-1];
for(j=M-1;j>=M-m;j--)
{
sum[i][j]=c%10;
c/=10;
}
}
}
int main()
{
int n,i,j,k,t,m;
int a[M],c[M];
int d,flag;
while(scanf("%d",&n)!=EOF)
{

if(n<3||n>7) continue;
m=pow(10,n-1);
pow_1(n);
for(i=m;i<m*10;i++)
{
for(j=0;j<M;j++) c[j]=a[j]=0;
flag=1;
t=i;
for(j=M-1;t!=0;j--){
a[j]=t%10;
for(k=M-1;k>=M-n;k--)
c[k]+=sum[a[j]][k];
t/=10;
}
d=0;
for(k=M-1;k>=0;k--){
t=(c[k]+d)%10;
d=(c[k]+d)/10;
c[k]=t;
if(a[k]!=c[k]){
flag=0;
break;
}
}
if(flag==1){
for(k=M-n;k<M;k++) printf("%d",a[k]);
printf("\n");
}
}
}
return 0;
}

该算法的思想可以求出大位数的水仙花数!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: