我是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++;
}
}
}
答案 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