题目描述
编程找出所有的三位数到七位数中的阿姆斯特朗数。阿姆斯特朗数也叫水仙花数,它的定义如下:若一个 n 位自然数的各位数字的 n 次方之和等于它本身,则称这个自然数为阿姆斯特朗数。 例如,153(153=1×1×1+3×3×3 +5×5×5)是一个三位的阿姆斯特朗数,8208 则是一个四位的阿姆斯特朗数。
输入描述
无
输出描述
逐个列举答案,列举格式见输出样例。注意符号均为英文,且冒号后有空格。
样例1
输入复制
无
输出
Ans.1: 153 Ans.2: 370 Ans.3: 371 . . (以下省略)
代码如下,供参考:
#include <bits/stdc++.h>
using namespace std;
int a[10][10];
int main(){
for(int i=0;i<=9;i++){
for(int j=0;j<=7;j++){
a[i][j] = pow(i, j);
}
}
int cnt = 0;
for(int i=100;i<=1e7-1;i++){
int tmp = i;
int ans = 0;
int len = 3;
if(i >= 1000)len++;
if(i >= 10000)len++;
if(i >= 100000)len++;
if(i >= 1000000)len++;
while(tmp != 0){
ans += a[tmp % 10][len];
tmp /= 10;
}
if(ans == i){
cnt++;
printf("Ans.%d: %d\n", cnt, i);
}
}
return 0;
}
我这个代码的运行时间为369ms,所耗内存3MB