网站首页 > java教程 正文
三位数的阿姆斯特朗数是一个整数,其各位数字的立方之和等于该数本身。例如,153是阿姆斯特朗数,因为1^3 + 5^3 + 3^3 = 153,371 是阿姆斯特朗数,因为3^3 + 7^3 + 1^3 = 371。如果对整数10取模,您将得到最后一位数字,例如 656%10 将得到 6,即 656 的最后一位数字。类似地,要减少每次迭代后的输入,您可以使用除法运算符,因为 656/10 将返回 65,没有最后一位数字。如果你知道这个技巧,那么解决任何需要检查各个数字的编程问题就变得很容易。这个Java程序使用相同的技术并计算0到999范围内的所有阿姆斯特朗数。这个程序也有不同的变体,例如你如何找到四位数的阿姆斯特朗数,因为这个程序只计算三位数阿姆斯特朗数字。 为此,您需要记住阿姆斯特朗数的一般定义,即阿姆斯特朗数是一个 n 位数字,等于其数字的 n 次方之和。
这是我们的 Java 程序,用于显示 0 到 9999 之间的所有阿姆斯特朗数。实际上,该范围内只有三位阿姆斯特朗数。
注:检查数字是否是阿姆斯特朗数的逻辑被硬编码为只能查找三位数。
因此,准确地说,这是一个显示 0 到 9999 之间的数字阿姆斯特朗数或任何用户提供的上限范围的程序。回到逻辑上来,它所做的只是:
- 在每次迭代中提取数字的各个数字
- 计算该数字的立方并添加到以零初始化的和中
- 将数字减少 10 倍以删除一位数字
它重复这个过程,直到输入不为零,这是我们停止检查的基本情况。在此循环结束时,如果计算出的总和等于原始数字,则它是阿姆斯特朗数,否则不是。
此逻辑封装在名为isArmstrongNumber(int number)的静态方法中。这再次在循环中调用,以提供从 0 到 9999 的所有数字。逻辑很简单,但提供了一种强大的技术来解决任何基于数字的各个数字的问题。
打印阿姆斯特朗数的 Java 程序
import java.util.Arrays;
import java.util.Scanner;
/**
* 该 Java 程序计算 0 到 9999 范围内的所有阿姆斯特朗数。
* 阿姆斯特朗数是其各位数字之和达到
* 三次方等于数字本身。例如,153 是阿姆斯特朗
* 数,因为 1**3 + 5**3 + 3**3 = 153。
*
*/
public class ArmstrongNumberDemo{
public static void main(String args[]) {
Scanner cmd = new Scanner(System.in);
System.out.println("Please enter a number up-to which
Armstrong number will be find");
int count = cmd.nextInt();
int index = 0;
for (int i = 0; i < count; i++) {
if (isArmstrongNumber(i)) {
System.out.printf("Armstrong number %d: %d %n", index, i);
index++;
}
}
cmd.close();
}
/**
* Method to check if given number is Armstrong Number or not
*
* @param number
* @return true, if Armstrong number, false otherwise.
*/
public static boolean isArmstrongNumber(int number) {
int sum = 0;
int copyOfInput = number;
while (copyOfInput != 0) {
int lastDigit = copyOfInput % 10;
sum += (lastDigit * lastDigit * lastDigit);
copyOfInput /= 10;
}
if (sum == number) {
return true;
}
return false;
}
}
Output
Please enter a number up-to which Armstrong number will be find
9999
Armstrong number 0: 0
Armstrong number 1: 1
Armstrong number 2: 153
Armstrong number 3: 370
Armstrong number 4: 371
Armstrong number 5: 407
- 上一篇: Java实用教程:运算符(java运算符运算规则)
- 下一篇: java学习——6运算符与表达式(一)
猜你喜欢
- 2024-10-11 Java的“异常”(JAVA的异常体系)
- 2024-10-11 第四讲《JAVA基础之运算符》,小妙招教你速记、速填坑
- 2024-10-11 容易让人忽视的,java高精度运算(java高精度转低精度的原则)
- 2024-10-11 提高千倍效率的 Java 代码小技巧(java提高班)
- 2024-10-11 一文搞明白java中的位运算、补码、反码、原码
- 2024-10-11 十五、Java运算符-赋值运算符与instanceof运算符
- 2024-10-11 一文掌握Java二、八、十六进制运算实现原理
- 2024-10-11 计算机进制转换(计算机进制转换教程)
- 2024-10-11 Java基础之try catch finally的原理
- 2024-10-11 LeetCode算法第29题:两数相除(计算两数相除并输出结果)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)