题目描述
自幂数是指,一个 N 位数,满足各位数字 N 次方之和是本身。例如,153 是 3 位数,其每位数的 3 次方之和,13+53+33=15313+53+33=153,因此 153 是自幂数;1634 是 4位数,其每位数的 4 次方之和,14+64+34+44=163414+64+34+44=1634,因此 1634 是自幂数。现在,输入若干个正整数,请判断它们是否是自幂数。
输入格式
输入第一行是一个正整数 M,表示有 M 个待判断的正整数。约定 1≤M≤1001≤M≤100。
从第 22 行开始的 M 行,每行一个待判断的正整数。约定这些正整数均小于 108
输出格式
输出 M 行,如果对应的待判断正整数为自幂数,则输出英文大写字母 T,否则输出英文大写字母 F。
提示:不需要等到所有输入结束在依次输出,可以输入一个数就判断一个数并输出,再输入下一个数。
输入数据 1
3
152
111
153
输出数据 1
F
F
T
解法
很简单,就是数位分离
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
/*
字符串的长度是每个数的几次方,要分离字符串
数位分离,用pow函数
*/
while(n--){
string s;
cin>>s;
int a=0,b=0;
for(int i=0;i<s.size();i++){
a*=10;//数位分离
a+=s[i]-'0';
}
/*字符串转数字,题目中要用pow函数*/
for(int i=0;i<s.size();i++)b+=pow(s[i]-'0',s.size());
//判断
if(a==b) cout<<"T\n";
else cout<<"F\n";
}
return 0;
}