题目
描述:
水仙花数又称阿姆斯特朗数。
水仙花数是指一个n 位数( n≥3 ),它的每个位上的数字的n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)
求输入的数字是否为水仙花数
练习阶段:
初级
代码
/*---------------------------------------
* 日期:2015-07-05
* 作者:SJF0115
* 题目:水仙花数
* 来源:华为机试练习题
-----------------------------------------*/
#include <iostream>
#include "oj.h"
#include <vector>
using namespace std;// 分解
vector<int> NumSplit(int num){vector<int> result;if(num == 0){result.push_back(0);return result;}//ifif(num < 0){return result;}//ifint tmp = num;while(tmp){result.insert(result.begin(),tmp % 10);tmp /= 10;}//whilereturn result;
}
// N次幂
unsigned int NOfNum(int num,int size){if(size <= 0){return 0;}//ifunsigned int result = 1;for(int i = 0;i < size;++i){result *= num;}//forreturn result;
}// 功能:判断输入 nValue 是否为水仙花数
// 输入: nValue为正整数
// 输出:无
// 返回:如果输入为水仙花数,返回1,否则返回0
unsigned int IsDaffodilNum(unsigned int nValue){if(nValue <= 0){return 0;}//ifvector<int> numvec = NumSplit(nValue);int size = numvec.size();int result = 0;for(int i = 0;i < size;++i){result += NOfNum(numvec[i],size);if(result > nValue){return 0;}//if}//forif(result == nValue){return 1;}//ifreturn 0;
}