题解
2026-02-05 22:12:11
发布于:浙江
22阅读
0回复
0点赞
题目解析
- 输入输出:第一行输入正整数 表示待判断数字个数;接下来 行每行一个正整数。对每个数输出单独一行,若为自幂数输出
T,否则输出F。 - 数据范围:,所有正整数均小于 (即最多 8 位数)。单个数字的幂次和最大为 ,在 32 位整型范围内。
- 复杂度要求:时间复杂度 ,其中 为数字位数;空间复杂度 或 (字符串存储)。
- 算法知识点:
数位分解、字符串处理、模拟、快速幂/幂运算
思路解析
- 获取位数与分解数字:利用
to_string()将整数转为字符串,字符串长度即为位数 。通过遍历字符数组,将每个字符 减去'0'即可得到对应位的数字值,避免了繁琐的取模除法运算。 - 计算幂次和:遍历每一位数字,计算其 次方并累加。代码中使用
pow(num, n)实现幂运算(注意该函数返回double,在此数据范围内精度足够且结果可安全转换为整型)。 - 自幂数判定:比较计算得到的幂次和与原数值,相等则为自幂数,输出
T;否则输出F。
完整代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int x;
cin >> x;
// 将数字转为字符串,同时获取位数和各位数字
string s = to_string(x);
int n = s.size(); // n 即为位数 N
int sum = 0;
// 遍历每一位,计算该位数字的 n 次方并累加
for (int i = 0; i < n; i++) {
int num = s[i] - '0'; // 字符转数字
sum += pow(num, n); // 计算 num^n 并累加
}
// 判断幂次和是否等于原数
if (sum == x)
cout << "T" << endl;
else
cout << "F" << endl;
}
return 0;
}
这里空空如也

有帮助,赞一个