题目
描述:
水仙花数又称阿姆斯特朗数。
水仙花数是指一个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;
}//if
if(num < 0){
return result;
}//if
int tmp = num;
while(tmp){
result.insert(result.begin(),tmp % 10);
tmp /= 10;
}//while
return result;
}
// N次幂
unsigned int NOfNum(int num,int size){
if(size <= 0){
return 0;
}//if
unsigned int result = 1;
for(int i = 0;i < size;++i){
result *= num;
}//for
return result;
}
// 功能:判断输入 nValue 是否为水仙花数
// 输入: nValue为正整数
// 输出:无
// 返回:如果输入为水仙花数,返回1,否则返回0
unsigned int IsDaffodilNum(unsigned int nValue){
if(nValue <= 0){
return 0;
}//if
vector<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
}//for
if(result == nValue){
return 1;
}//if
return 0;
}