【中学】寻找阿姆斯特朗数
请编写一个程序寻找一种特殊整数:一个 n 位的正整数等于其各位数字的n次方之和。
输入:
正整数的位数n(n<=6)。
输出:
所有此n位特殊数。每个数占一行。若不存在符合条件的特殊数,则输出提示:“No output.”;若存在,则从小到大进行输出。
样例:
序号 | 测试输入 | 期待的输出 | 额外进程 |
---|---|---|---|
1 | 3↵ | 153↵ 370↵ 371↵ 407↵ | 0 |
2 | 2↵ | No output.↵ | 0 |
思路
通过循环平判断每个范围内的数字是否为阿姆斯特朗数
因为n<=6,所以无论n是多少都当做n=6处理就可以了,比如 12345 的第一位是12345/100000=0
代码
#include <stdio.h>
#include <math.h>
int main()
{
int n,a,b,c,d,e,f,g,i,j=0;
scanf("%d",&n);
a=pow(10,n);
for(i=pow(10,n-1);i<a;i++)
{
b=i/100000;
c=(i%100000)/10000;
d=(i%10000)/1000;
e=(i%1000)/100;
f=(i%100)/10;
g=i%10;
if((pow(b,n)+pow(c,n)+pow(d,n)+pow(e,n)+pow(f,n)+pow(g,n))==i&&i>=a/10)
{
printf("%d\n",i);
j++;
}
}
if(j==0)
{
printf("No output.\n");
}
return 0;
}
课外思考
如果位数更多呢,比如n<=10?
可不可以用别的方法,不那么臃肿的方法?
事实上我们可以用两个循环加一个存储结果的变量all解决这个问题
同学们可以自己试试,如果想不出来可以参考n位正整数的个数