水仙花数是什么
水仙花数,又称阿姆斯壮数,指各位数立方和等于该数本身的数。比如153,它的各位数立方和等于1^3 + 5^3 + 3^3 = 153,所以153是水仙花数。
用java编写水仙花数程序
我们可以用Java编写一个求解水仙花数的程序。首先,我们需要明确判断一个数是否为水仙花数的依据。可以采用以下步骤:
- 将这个数按位拆分,可以使用%i和/%操作符。
- 对每个位数进行立方运算并累加。
- 判断累加结果是否等于该数本身,如果相等则该数为水仙花数,否则不是。
以下是一个简单的Java程序:
```
public class NarcissisticNumber {
public static void main(String[] args) {
for (int i = 100; i < 1000; i++) {
if (isNarcissistic(i)) {
System.out.println(i);
}
}
}
public static boolean isNarcissistic(int num) {
int sum = 0;
int origin = num;
while (num != 0) {
int digit = num % 10;
sum += digit * digit * digit;
num /= 10;
}
return sum == origin;
}
}
```
在这个程序中,我们循环遍历所有三位数,然后调用isNarcissistic()方法判断它是否为水仙花数。isNarcissistic()方法依据以上步骤进行判断。
优化水仙花数程序
以上程序已经可以正确地求解水仙花数,但是我们可以进行一些优化来提高效率。首先,我们可以通过将位数立方的结果存储在一个数组中来避免重复计算。同样,我们还可以将不必要的操作移除掉,例如计算出原始数值后不再使用。
以下是优化后的Java程序:
```
public class NarcissisticNumberOptimized {
public static void main(String[] args) {
int[] digits = {0, 1, 8, 27, 64, 125, 216, 343, 512, 729};
for (int i = 100; i < 1000; i++) {
if (isNarcissistic(i, digits)) {
System.out.println(i);
}
}
}
public static boolean isNarcissistic(int num, int[] digits) {
int sum = 0;
while (num != 0) {
int digit = num % 10;
sum += digits[digit];
num /= 10;
}
return sum == num;
}
}
```
在这个程序中,我们使用了一个digits数组来存储各位数的立方结果。同时,我们可以将原始数值存储在一个变量中,同时不再使用num变量。
这样,我们的程序可以更加高效地检查水仙花数,从而提高程序性能。
本文来自投稿,不代表亲测学习网立场,如若转载,请注明出处:https://www.qince.net/java1dnjava.html
郑重声明:
本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
我们不承担任何技术及版权问题,且不对任何资源负法律责任。
如遇到资源无法下载,请点击这里失效报错。失效报错提交后记得查看你的留言信息,24小时之内反馈信息。
如有侵犯您的版权,请给我们私信,我们会尽快处理,并诚恳的向你道歉!