阿姆斯特朗数
难度:
标签:
题目描述
代码结果
运行时间: 23 ms, 内存: 15.8 MB
/*
题目思路:
阿姆斯特朗数是一个n位数,其每个位上的数字的n次幂之和等于它本身。
例如,153是一个阿姆斯特朗数,因为1^3 + 5^3 + 3^3 = 153。
解决方案:
1. 将数字转为字符串以便迭代每个位数。
2. 使用Java Stream API计算每个位数的n次幂之和。
3. 比较这个和与原始数字是否相等。
*/
import java.util.stream.IntStream;
public class ArmstrongNumberStream {
public static boolean isArmstrong(int N) {
String num = Integer.toString(N);
int n = num.length();
int sum = num.chars()
.map(Character::getNumericValue)
.map(digit -> (int) Math.pow(digit, n))
.sum();
return sum == N;
}
public static void main(String[] args) {
int num = 153;
System.out.println(isArmstrong(num)); // 输出: true
}
}
解释
方法:
这个题解的核心思路是首先计算数字 n 的位数 k,然后遍历 n 的每一位数字,把每一位数字的 k 次幂求和。最后,判断这个幂和是否等于原数字 n。如果相等则表示该数字是阿姆斯特朗数(即每个位上的数字的 k 次幂之和等于该数本身)。
时间复杂度:
O(k)
空间复杂度:
O(k)
代码细节讲解
🦆
在计算数字 n 的位数和遍历每一位时,你是如何保证算法的正确性即每位数字确实被正确计算了它的 k 次幂?
▷🦆
这种方法在处理非常大的数字时的效率如何?有没有可能优化计算大数的 k 次幂的过程?
▷🦆
这个解法中,如果输入的 n 是一个负数,算法会如何处理?是否可以将算法扩展到包括负数的情况?
▷