趣味算法-水仙花数
2012-01-24 18:42
441 查看
趣味算法-水仙花数:
一个n位正整数(n >= 3), 它的每个位上得数字的n次幂之和等于它本身。
1) 计算当前正整数的位数;
2) 计算每个位数上n次幂的和;
3) 判断是否为水仙花数。
算法复杂度分析:
计算范围 :nRange
当前数位数: n
O(nRange, n) = 2*n*nRange
一个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
相关文章推荐
- 趣味算法两则~
- 【求水仙花数】的算法实现
- 蓝桥杯 ALGO-126 算法训练 水仙花
- 二分图的最大匹配 ————匈牙利算法 (转载了一个大神的趣味算法) poj3041(Asteroids)
- 趣味算法-自守数
- 趣味算法:猴子搬香蕉问题
- 【算法-3】求100—999之间的水仙花数
- 趣味算法-三色旗
- 趣味算法-巧填运算符
- 两本趣味算法书
- 趣味算法-0的迷宫
- 趣味算法:老鼠试毒瓶问题
- 趣味数学问题的算法实现
- 算法训练 水仙花
- 21位自幂数( 水仙花)数 算法
- 算法训练 水仙花
- 趣味算法-寻找假硬币
- 趣味数学-鸡兔同笼算法
- 2015 年 JXNU_ACS 算法组寒假第一次周赛 1008 趣味数学题
- 「算法」水仙花 java_网易