寻找水仙花数是一道经典的算法题,水仙花数定义是一个整数的每一位乘以位数的立方相加等于这个数本身,例如153=1^3+5^3+3^3,所以153是水仙花数。
了解定义,接下来就是逻辑的实现,首先要知道数的位数,用while就可以实现,接下来就是立方相加,这里介绍两种方法,第一种是常规的方法,将要判断的数%10,取
一位数进行计算,将计算结果存入一个变量中,重复这个过程,最后输出:
int ret(int i)
{
int count = 1;
while (i /= 10)
{
count++;
}
return count;
}
int set(int i, int sz)
{
int sum = 0;
int j = 0;
int s = 0;
for ( j = 0; j < sz; j++)
{
int k = i % 10;
int sem = 1;
for (s = 0; s < sz; s++)
{
sem *= k;
}
sum += sem;
i /= 10;
}
return sum;
}
int main()
{
int i = 0;
for (i = 0; i <= 100000; i++)
{
int sz = ret(i); //153
int sf = set(i, sz);
if (sf == i)
{
printf("%d ", i);
}
}
return 0;
}
第二种方法是运用pow函数,下面是cplusplus中对pow的演示,pow可以将一个数提升到想要的次方:
那么就可以用另一种方法实现次方问题:
int main()
{
int a = 0;
for (a = 0; a <= 100000; a++)
{
int n = 1;
int tem = a;
while ((tem/=10)!=0)
{
n++;
}
tem = a;
int sum = 0;
while (tem!=0)
{
sum += pow(tem % 10, n);
tem /= 10;
}
if (sum == a)
{
printf("%d ", sum);
}
}
return 0;
}
标签:10,sz,实现,++,int,sem,打映,水仙花
From: https://blog.csdn.net/credif/article/details/144070591