gpt4 book ai didi

java - 找出数字之间的阿姆斯特朗数

转载 作者:行者123 更新时间:2023-12-01 06:25:02 25 4
gpt4 key购买 nike

下面是我的代码。

package com.ofss.java.examples;

import java.util.Scanner;

class ArmstrongNumber {
public static void main(String[] args) {
int c = 0, a;
int n1, n2;//Range in which armstrong number need to find

Scanner s = new Scanner(System.in);
System.out.println("Enter the first number");
n1 = s.nextInt();
System.out.println("Enter the second number");
n2 = s.nextInt();

for (int i = n1; i <= n2; ++i) {
while (i > 0) {
a = i % 10;
System.out.println(a);
i = i / 10;
System.out.println(i);
c = c + (a * a * a);
System.out.println(c);
}
if (i == c)
System.out.println(c + "armstrong number");
else
System.out.println(c + "Not armstrong number");

}
}
}
  1. 执行后我得到的结果不正确。代码会无限次运行,直到您停止为止。它必须打印 151-154 之间的数字(153 为阿姆斯特朗)。
  2. 此外,它错误地将 153 打印为非阿姆斯特朗数字。

Armstrong Number

...is a number that is the sum of its own digits each raised to the power of the number of digits.

最佳答案

您不应该更改i,因为它也用于

for (int i = n1; i <= n2; ++i) 

或者你可能永远不会退出该循环,因为你期望 i 在第一次迭代结束时为负数。很难递增,直到达到 n2

使用不同的变量来安全地跟踪 i

    int j = i;
while(j > 0) ...
<小时/>

关于Armstrong number :

Armstrong number is a number that is the sum of its own digits each raised to the power of the number of digits

您需要将每个数字的长度(位数)次方。

153 = 1^3 + 5^3 + 3^3
1634 = 1^4 + 6^4 + 3^4 + 4^4

这是它的方法:

public static boolean isArmstrongNumber(int number){
int power = Integer.toString(number).length(); //just to get the number of digit...

int tmp = number;
int digit , sum = 0;

while(tmp > 0){
digit = tmp % 10;
sum += Math.round(Math.pow(digit , power));
tmp /= 10;
}

return sum == number;
}

使用从 0 到 10.000 的检查给出:

0 1 2 3 4 5 6 7 8 9 153 370 371 407 1634 8208 9474

与维基百科相同:

The sequence of base 10 narcissistic numbers starts: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, ...

请注意,使用方法可以消除忘记重置变量的风险,例如在您的情况下的 c 。纠正这个问题会给你一些更多的“正确”结果(最好是 3 位数字)

您还可以使用更少的数学来读取数字并使用 char[],请记住,您需要减去 '0' 值来获取 a 的数值字符:

public static boolean isArmstrongNumber(int number){
char[] digits = Integer.toString(number).toCharArray();

int power = digits.length;
int sum = 0;

for(char c : digits){
int digit = c - '0';
sum += Math.round(Math.pow(digit, power));
}

return sum == number;
}

关于java - 找出数字之间的阿姆斯特朗数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52070009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com