您的位置:首页 > 其它

趣味算法-水仙花数

2012-01-24 18:42 441 查看
趣味算法-水仙花数:

一个n位正整数(n >= 3), 它的每个位上得数字的n次幂之和等于它本身。

1) 计算当前正整数的位数;

2) 计算每个位数上n次幂的和;

3) 判断是否为水仙花数。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// 0: the number is not narcissus number
// 1: the number is narcissus number
int IsNarcissusNum(int nNum)
{
int n = 1, i = 0;
int nSum = 0;
int nTmp = 0;
int nRes = 0;
int nCalcNum = 0;

if (nNum - 100 < 0)
return 0;

nTmp = nNum;
while (nTmp/10 > 0)
{
n++;
nTmp = nTmp / 10;
}

nTmp = nNum;
while (nTmp/10 > 0)
{
nCalcNum = nTmp % 10;
nTmp = nTmp / 10;
nRes = pow(nCalcNum, n);

// for (i = 0; i < n; i++)
//{
//    nRes *= nCalcNum;
//}
nSum += nRes;
}

nRes = pow(nTmp, n);
//for (i=0; i < n; i++)
//{
//    nRes *= nTmp;
//}
nSum += nRes;

if (nSum == nNum)
{
nRes = 1;
}
else
{
nRes = 0;
}

return nRes;
}

int main()
{
int i = 0;

for (i = 100; i < 1000000; i++)
{
if (1 == IsNarcissusNum(i))
{
printf("The number %d is narcissus number \n", i);
}
}

printf("Test end \n");
scanf("%d", &i);
return 0;
}


算法复杂度分析:

计算范围 :nRange

当前数位数: n

O(nRange, n) = 2*n*nRange
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: