Java中的阿姆斯特朗数字算法

时间:2018-03-27 16:25:57

标签: java algorithm

我是java编程新手,请告诉我这个Armstrong数字算法的实现有什么问题。

无限次打印“1”。

阿姆斯壮三位数是一个整数,其数字的立方总和等于数字本身。例如,371是阿姆斯特朗的数字,因为3 ** 3 + 7 ** 3 + 1 ** 3 = 371。

参考:https://pages.mtu.edu/~shene/COURSES/cs201/NOTES/chap04/arms.html

代码在这里:

import java.util.Scanner;
public class Program {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("Enter range:");

        int num =s.nextInt();
        int range = s.nextInt();
        int rem,temp;
        int sum;

        System.out.println(num+" "+range);

        while(num<=range) {
             sum=0;
            temp=num;
            while(temp>0) {
                rem=temp%10;
                sum=sum+(rem*rem*rem);
                temp=temp/10;
            }
            if(sum==num)
                System.out.println(sum);

            num++;
        }
     }
}

3 个答案:

答案 0 :(得分:2)

num = num / 10;

您正在重新分配您的计数器变量。

让变量num为1,范围为10。

当我们到达num = num / 10;时,你将num设置为0.因此,num将始终小于范围(10),导致程序陷入无限循环。

答案 1 :(得分:0)

  while(num>0) {
        rem=num%10;
        sum=sum+(rem*rem*rem);
        num=num/10;
    }//By the wnd of this loop num always will be euqals to zero.
        if(sum==temp)
            System.out.println(sum);

        num++;//So here always num value will be 1.So it never cross the range value.
    }

请尝试以下代码:

while(num<=range) {
         sum=0;
        temp=num;

        while(temp>0) {
            rem=temp%10;
            sum=sum+(rem*rem*rem);
            temp=temp/10;
        }
        if(sum==num)
            System.out.println(sum);

        num++;
    }

答案 2 :(得分:-1)

使用您熟悉的语言编写代码然后学习要迁移的Java语法,以便将其更改为java