Armstrong 数,就是n位数的各位数的n次方之和等于该数,如:
153=13+53+33
1634=14+64+34+44
- 解决思路: 先求出输入数字的位数 s,再将输入数字的每位数字存储,再按照要求求出它们的 s 次方的和,和如果与输入数字相等,则为阿姆斯壮数,否则不是阿姆斯壮数。
代码
#include <math.h>
#include <stdio.h>
int main()
{
int sum=0;
int n,x,y;
int s=0;
printf("请输入一个数字\n");
scanf("%d",&n);
y=x=n;
do
{
n=n/10;
s++;
}while(n!=0);
printf("%d 是 %d 位数\n",x,s);
int num[s];
for(int i=s-1;i>=0;i--)//将输入数字的每位数字进行存储
{
num[i]=x%10;
x=x/10;
}
/*printf("将输入的数字从数组输出以便验证数组存储的是否正确\n");
for(int i=0;i<s;i++)
{
printf("%d ",num[i]);
}
printf("\n");*/
for(int i=0;i<s;i++)
{
sum+=pow(num[i],s);/*pow C 库函数 double pow(double x, double y) 返回 x 的 y 次幂,
即 x^y。需要C 标准库 - <math.h>*/
}
if(sum==y)
{
printf("%d 是阿姆斯壮数",y);
}else
{
printf("%d 不是阿姆斯壮数",y);
}
return 0;
}
运行结果: