洛谷 B3841:[GESP202306 二级] 自幂数判断
【题目来源】
https://www.luogu.com.cn/problem/B3841
【题目描述】
自幂数是指,一个 N 位数,满足各位数字 N 次方之和是本身。例如,153 是 3 位数,其每位数的 3 次方之和,1^3+5^3+3^3=153,因此 153 是自幂数;1634 是 4 位数,其每位数的 4 次方之和,1^4+6^4+3^4+4^4=1634,因此 1634 是自幂数。现在,输入若干个正整数,请判断它们是否是自幂数。
【输入格式】
输入第一行是一个正整数 M,表示有 M 个待判断的正整数。约定 1≤M≤100。
从第 2 行开始的 M 行,每行一个待判断的正整数。约定这些正整数均小于 10^8 。
【输出格式】
输出 M 行,如果对应的待判断正整数为自幂数,则输出英文大写字母 T,否则输出英文大写字母 F。
提示:不需要等到所有输入结束在依次输出,可以输入一个数就判断一个数并输出,再输入下一个数。
【输入样例1】
3
152
111
153
【输出样例1】
F
F
T
【输入样例2】
5
8208
548834
88593477
12345
5432
【输出样例2】
T
T
T
F
F
【算法分析】
两个重要步骤:
1.求一个数的位数 n。
2.求次数各位的 n 次幂之和。
【算法代码】
#include <bits/stdc++.h>
using namespace std;int n,x,t,sum,p;int main() {cin>>n;while(n--) {cin>>x;int copy=x;int tmp=x,p=0;while(tmp) {tmp/=10;p++;}sum=0;while(x) {t=x%10;sum+=pow(t,p);x/=10;}if(sum==copy) cout<<"T\n";else cout<<"F\n";}return 0;
}/*
in:
5
8208
548834
88593477
12345
5432out:
T
T
T
F
F
*/
【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/138290567
https://blog.csdn.net/2401_86982397/article/details/144334510