#题外话 (第15篇题解)(本题为普及-难度)
#先看题目
题目链接https://www.luogu.com.cn/problem/B3841 #思路
看代码上的注释吧……(来自手残党的哀嚎)
#代码
#include <iostream>//这题没涉及太多预设函数,用iostream就行
using namespace std;
int po(int arg0,int arg1){//幂运算函数,0为底数,1为指数(不知道为啥我用原版^总是返回错误……)
int cnt=1;//出气筒
for(int index=0;index<arg1;index++)cnt*=arg0;//按照幂运算的原理,循环乘
return cnt;
}
int dig(int num){//不是挖,是判断数位的函数
int ret=0;//提前定义返回值
while(num!=0){ret++;num/=10;}//如果该数还不到0,就揍掉它一位数,并让ret++
return ret;
}
bool spn(int n){//主判断函数
int d=dig(n),sum=0,number=n;//sum用于累加,number用作出气筒,d只是为了代码简洁
while(number!=0){
sum+=po((number%10),d);
number/=10;
}//一样的套路,只不过这次不记录了,直接上去就淦
if(sum==n)return 1;//如果所得和与原数相同,那么该数为自幂数,否则不是。
else return 0;
}
int main(){
int m,x;//m懂得都懂,x是每一个被判断的数
cin>>m;
for(int i=0;i<m;i++){
cin>>x;
if(spn(x))cout<<"T"<<endl;//spn用的是bool类型返回值,所以直接if它就行
else cout<<"F"<<endl;
}
return 0;
}//洛谷B3841-自幂数