寻找阿姆斯特朗数问题
1,问题描述:
请编写一个程序寻找一种特殊整数:一个 n 位的正整数等于其各位数字的n次方之和。
例如:407=4×4×4+0×0×0+7×7×7。所以407就是一个特殊数。
输入:位数
输出:该位数内的阿姆斯特朗数,若没有则输出No output!
2,思路梳理:
- 循环表示10的n到10的n+1之间的所有数
- 对每一个数,将其按位分开(难点)
- 对每一个数的每一位,分别立方求和(容易出错)
- 输出结果
3,逐一分析
1.可以用循环表示
法一:int num=1;//负责记录数据的变量(简称计数变量)必须规定初始值
for(i=0;i<n;i++)
{
num*=10;
}
法二:直接用幂函数
#include <stdio.h>
#include <math.h>
int main ()
{
int n,m,i,j,num=1;
scanf("%d",&n);
num=pow(10,n);
printf("%d",num);//幂函数不能直接使用在输出函数之中
return 0;
}
2. 析取位数
for(i=num/10;i<num;i++)
{
sub=i;//为了顺序遍历每一个数,必须用sub代替i进行运算
for(j=0;j<n;j++)
{
result=sub%10;//求余
sub/=10;//抹去尾数
sum+=pow(result,3);
}
if(sum==i)
{
printf("%d\n",i);
flag=1;//况用来应对没有输出结果的情况
}
sum=0;//单次循环计数时,要留心sum在循环末尾要清零
}
if(flag==0)
{
printf("No output!");
}
3,输出结果 注意换行符