输入任意位数,得出相应位数的所有水仙花数(百度百科代码)
#include<iostream>
#include <cmath>
using namespace std;
int main()
{
long n1, n2, a;
int i;
cout << "请输入Narcissistic number的位数:" << endl;
cin >> i;
cout << i << "位数的Narcissistic number包括:" << endl;
for (n1 = pow(10, i - 1); n1 < pow(10, i); n1++)
{
n2 = 0;
for (int j=0; j < i; j++)
{
a = pow(10, j);
a = n1 / a;
a = a % 10;
a = pow(a, i);
n2 = n2 + a;
}
if (n1 == n2)
cout << n1 << endl;
}
return 0;
}
double pow(double x,double y)函数耗时太长,可自定义一个功能类似的函数int power(int x,int y)
int power(int x,int y)
{
int c=1,i=0;
for(i=0;i<y;i++)
c*=x;
return c;
}
完整的代码(限制在8位数以内)
#include <iostream>
using namespace std;
int power(int a,int b)
{
int c=1,i=0;
for(i=0;i<b;i++)
c*=a;
return c;
}
int main()
{
int n,N,a[8],i,j,max,sum; //a[N]限制了位数
cin>>n;
N=power(10,n-1);
max=power(10,n)-1;
for(j=N;j<=max;j++)
{
for(i=0,sum=0;i<n;i++)
{
a[i]=(j/power(10,i))%10;
sum+=power(a[i],n);
}
if(sum==j)
cout<<j<<endl;
}
return 0;
}
可以用new来动态设置a[N]
#include <iostream>
using namespace std;
int power(int a,int b)
{
int c=1,i=0;
for(i=0;i<b;i++)
c*=a;
return c;
}
int main()
{
// int n,N,a[8],i,j,max,sum; //a[N]限制了位数
int *n=new int;
cin>>*n;
int N,a[*n],i,j,max,sum;
N=power(10,(*n)-1);
max=power(10,*n)-1;
for(j=N;j<=max;j++)
{
for(i=0,sum=0;i<*n;i++)
{
a[i]=(j/power(10,i))%10;
sum+=power(a[i],*n);
}
if(sum==j)
cout<<j<<endl;
}
delete n;
return 0;
}