java输出错误



我写了一个程序,它接受整数和字符串输入,如果给定的数字是armstrong,则删除重复并打印它,但是我的程序给出错误的输出。

import java.util.Scanner;
import java.lang.Math;
public class Main {

public static boolean checkArmstrong(int num) {
int org=num, sum=0;
while(num>0) {
sum += (int)Math.pow((num%10), 3);
num /= 10;
}
if(sum == org)
return true;
else 
return false;
}
public static String removeDuplicate(String str) {
char[] charr=str.toCharArray();
char[] resarr=new char[charr.length];
int[] max=new int[123];
int k=0;
for(int i=0; i<charr.length; i++) 
if(max[(int)charr[i]++]==0)
resarr[k++]=charr[i];
String res=new String(resarr);
return res;
}
public static void main(String[] args) {

Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
sc.nextLine();
String str=sc.nextLine();
if(checkArmstrong(num)) {
String res=removeDuplicate(str);
System.out.println(res);
}
}
}

你的代码只适用于3位数的armstrong数字:

sum += (int) Math.pow((num % 10), 3);

您可以通过在运行时检查它来避免硬编码此值:

public static boolean checkArmstrong(int num) {
if (num == 0)
return true; // also avoids log10(0) 

int org = num, sum = 0;
int digits = (int) (Math.log10(num) + 1);

while (num > 0) { 
sum += (int) Math.pow((num % 10), digits);
num /= 10;
}

return sum == org;
}

您将创建一个无限循环😂

,除了该数字是int…:(为了好玩,让我们假设它不是。

while(num>0) {
sum += (int)Math.pow((num%10), 3);
num /= 10;
}

num渐近于0。除法无穷次后,它变成1/无穷,但永远不会是零。问你自己这个问题,"如果乔伊离墙16英尺远,每一步都走完到墙的剩余距离的一半,那么他需要走多少步才能到达墙?"无限的步骤。乔伊永远也到不了那里。就像你的while循环永远不会结束🤯.

感谢Deadbeef提供了这个概念的搞笑插图的链接。

最新更新