【问题标题】:Struggling with harshad algorithm ? why no output?苦苦挣扎于harshad算法?为什么没有输出?
【发布时间】:2021-01-24 20:09:26
【问题描述】:

harshad 数是一个可以被其数字之和整除的数。例如,24 是 Harshad 数,因为 24 / (2 + 4) = 4。例如,23 不是 Harshad 数,因为 23 / (2 + 3) = 一些小数。这是我尝试提示用户输入整数,检查所述整数是否为 Harshad 数,以及是否输出;如果没有,继续将数字加 1,直到找到要输出的数字。

import java.io.*;

public class harshad {

    public static void main(String[] args) throws NumberFormatException, IOException {
        // TODO Auto-generated method stub
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String number = reader.readLine(); // "23"
        boolean isHarshad = false;
        while (isHarshad = false) {
            int sum = 0;
            String[] parts = number.split(""); // ["2", "3"]
            int num = Integer.parseInt(number); // 23
            for (int i = 0; i < parts.length; i++) {
                sum += Integer.parseInt(parts[i]); // 5
            }
            if (num % sum == 0) { // clean division
                System.out.println(num); // should work for number 24
                isHarshad = true; // break loop
            } else {
                number = Integer.toString(num++); // "24"
            }
        }
    }
}

【问题讨论】:

  • 您增加 num,但循环将原始字符串值重新分配给 num 和部分。您还在循环条件中指定 false。
  • 感谢您指出这一点

标签: java parsing math split


【解决方案1】:

while (isHarshad = false) 替换为while (isHarshad == false) 甚至更好的while (!isHarshad),否则您是在进行分配而不是比较。

number = Integer.toString(num++); 替换为number = Integer.toString(++num);,否则增量发生在赋值之后,而不是之前。

【讨论】:

  • 谢谢!!不知道 ++num 的事情。
猜你喜欢
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 2019-10-13
  • 1970-01-01
相关资源
最近更新 更多