标签:
| 描述: |
水仙花数又称阿姆斯特朗数。 水仙花数是指一个n 位数( n≥3 ),它的每个位上的数字的n 次幂之和等于它本身。 (例如:1^3 + 5^3 + 3^3 = 153) 求输入的数字是否为水仙花数
|
| 知识点: |
工程环境请使用VS2005
|
| 题目来源: | 软件训练营 |
| 练习阶段: | 初级 |
这题不知道有没有好的方法,我的代码效率不高,就是按要求做下来,希望各位大年给说说高效的算法~
#include<iostream>
using namespace std;
// 功能:判断输入 nValue 是否为水仙花数
// 输入: nValue为正整数
// 输出:无
// 返回:如果输入为水仙花数,返回1,否则返回0
unsigned int IsDaffodilNum(unsigned int nValue)
{
unsigned int i=0,j,sum,tmp,tmp1;
unsigned int n=nValue;
//取得位数,位数最后用变量i表示
while(n)
{
i++;
n/=10;
}
if(i<3)return 0;//如果位数小于3则不是水仙花数
//对各位数进行计算次方和
n=nValue;
sum=0;
while(n)
{
tmp=n%10;
tmp1=tmp;
for(j=1;j<i;j++)
tmp1*=tmp;
sum+=tmp1;
n/=10;
}
//次方和与给定数字相等,则是水仙花数
if(sum==nValue)return 1;
return 0;
}
int main()
{
if(IsDaffodilNum(153))cout<<"yes"<<endl;
return 0;
}
标签:
原文地址:http://blog.csdn.net/wljwsj/article/details/45481931