/*
输入一个正整数,判断它是不是一个Armstrong数。
这里,若一个m位正整数n的各位数字的m次方之和等于m,则称n是一个Armstrong数。
例如:
3位数中的Armstrong数 153=1^3+5^3+3^3
4位数中的Armstrong数 1634=1^4+6^4+3^4+4^4
5位数中的Armstrong数 92727=9^5+2^5+7^5+2^5+7^5
*/
#include<iostream.h>
//函数split拆出n的各位数字依次放在数组d中,返回n的位数m
int split(long n,int d[])
{
int m=0;
while(n!=0)
{
d[m]=n%10;
m++;
n/=10;
}
return m;
}
//计算p=k^m的函数expnm
long expnm(int k,int m)
{
long p=1;
int i;
for(i=1;i<=m;i++)
p*=k;
return p;
}
//求各位数字的m次方之和的函数sum
long sum(int m,int d[])
{
long s=0;
int i;
for(i=0;i<m;i++)
s+=expnm(d[i],m);
return s;
}
//主函数
void main()
{
long n; //定义变量n(长整数型)
int m,d[10]; //数组d用于保存n的各位数字
cout<<"请输入正整数的值 n="; //将提示信息显示在屏幕上
cin>>n;
m=split(n,d);
if(n==sum(m,d))
cout<<n<<"是Armstrong数"<<endl;
else
cout<<n<<"不是Armstrong数"<<endl;
}