题目:判断一个数是否是Armstrong Number,设数字N有n位,则每个数位上的数字的n次方的和为N。
分析:数论。直接按照题意模拟即可。
说明:不需要考虑溢出。
#include <stdio.h>
#include <stdlib.h>
int armstrong_number(int N)
{
int S1 = N, order = 0;
while (S1) {
order ++;
S1 /= 10;
}
int S2 = N;
int add, ans = 0; // 9^9 < 1e9
while (S2) {
add = 1;
for (int i = 0; i < order; ++ i) {
add *= S2%10;
}
ans += add;
S2 /= 10;
}
return ans == N;
}
int main()
{
int T, N;
while (~scanf("%d",&T))
while (T --) {
scanf("%d",&N);
if (!armstrong_number(N)) {
puts("Not Armstrong");
}else {
puts("Armstrong");
}
}
return 0;
}