描述: |
水仙花数又称阿姆斯特朗数。 水仙花数是指一个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; }
时间: 2024-10-14 10:44:43