import java.util.Scanner;
class arm
{
public static void main(String args[])
{
Scanner scan = new Scanner(System.in);
System.out.println("Enter the lower number");
long l=scan.nextLong();
System.out.println("Enter the upper number");
long u=scan.nextLong();
System.out.println("The armstrong numbers in this range are");
long t=l;
while(t<u)
{
long hold=t;
long ram=0;
long f=0;
long multiplier=0;
while(hold>0)
{
ram=hold%10;
hold=hold-ram;
hold=hold/10;
ram=multiplier;
ram=ram*multiplier;
ram=ram*multiplier;
f=f+ram;
}
if(f==t)
System.out.print(t+" ");
t++;
}
}
}
例如:如果输入为1和999,则输出为
1 153 370 371 407
这是我编写的程序,用于打印给定范围内的数字是非常强的数字,为什么它不起作用?
仅供参考,阿姆斯特朗号码是一个与其数字立方体总和相同的数字,因此371 =(3 ^ 3)+(7 ^ 3)+(1 ^ 3)= 27 + 343 + 1 = 371
如果您想了解更多详情,请告诉我。
答案 0 :(得分:1)
您的第ram = multiplier
行导致错误。
您可以执行此操作而不是该行和ram = ram * multiplier line
f = f + ram *ram *ram;
说明:f
包含总和。 ram
包含最后一位数字。你必须得到所有数字的立方体的总和。您提取所有数字,找到他们的多维数据集(ram * ram *ram
)并将其添加到f
答案 1 :(得分:0)
正如我在评论中发布的,这是我根据维基百科中描述的formula检查Narcissistic(Armstrong)号码的版本:
以下是完整代码:
import java.util.ArrayList;
import java.util.Scanner;
public class StackOverflow {
public static void main (String[] args){
getNarcisist();
}
public static void getNarcisist(){
System.out.println("Insert lowest number");
Scanner lower = new Scanner(System.in);
Long lowestNum = lower.nextLong();
System.out.println("Insert highest number");
Scanner highest = new Scanner(System.in);
Long highestNum = highest.nextLong();
highest.close();
lower.close();
ArrayList<Long> list = new ArrayList<Long>();
for(long i=lowestNum+1;i<highestNum;i++){
list.add(i);
}
for(Long checkedNumber : list) {
int length = String.valueOf(checkedNumber).length();
long[] digitsRepresentation = new long[length];
int i=0;
Long temp = checkedNumber;
while(temp>0) {
long digit = (temp%10);
temp = temp/10;
digitsRepresentation[i]=digit;
i++;
}
System.out.println("Now is checkin number: "+checkedNumber);
if(checkedNumber == calculateNarcisist(digitsRepresentation)) {
System.out.println("Found narcisist number: "+checkedNumber);
}
}
}
public static long calculateNarcisist(long[] input){
long sum=0;
for (int i=0; i<input.length;i++){
double pow = input.length;
double narcisistSum = Math.pow((double)input[i], pow);
sum +=narcisistSum;
}
return sum;
}
}
这个程序,计算两个输入数字之间的范围(不包括),获取范围内每个数字的数字,并计算阿姆斯特朗总和,如果它找到任何数字,其中阿姆斯特朗总和等于检查数,则打印它是屏幕。