遍历数字中的每个数字

Isa*_*wis 14 java iteration math numbers

我正在尝试创建一个程序,用于判断给定的数字是否为" Happy Number ".找到一个快乐的数字需要将数字中的每个数字平方,并将每个数字的平方的结果加在一起.

在Python中,您可以使用以下内容:

SQUARE[d] for d in str(n)
Run Code Online (Sandbox Code Playgroud)

但是我找不到如何在Java中迭代数字中的每个数字.正如您所知,我是新手,并且在Java文档中找不到答案.

Arg*_*ote 24

您可以使用模10操作来获取最右边的数字,然后将数字除以10以获得下一个数字.

long addSquaresOfDigits(int number) {
    long result = 0;
    int tmp = 0;
    while(number > 0) {
        tmp = number % 10;
        result += tmp * tmp;
        number /= 10;
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

你也可以将它放在一个字符串中并将其转换为一个char数组并迭代它做类似的事情 Math.pow(charArray[i] - '0', 2.0);

  • 啊,请不要使用Math.pow来对数字进行平方.`结果+ =((数字%10)*(数字%10))`会更好(或使用额外的变量来消除双重'%`).我想你的'number/10`应该是'number/= 10`. (2认同)

Spa*_*gen 6

我想知道哪种方法可以最快地将正数拆分为 Java 中的数字,字符串与模数

  public static ArrayList<Integer> splitViaString(long number) {

    ArrayList<Integer> result = new ArrayList<>();
    String s = Long.toString(number);

    for (int i = 0; i < s.length(); i++) {
      result.add(s.charAt(i) - '0');
    }
    return result; // MSD at start of list
  }
Run Code Online (Sandbox Code Playgroud)

对比

  public static ArrayList<Integer> splitViaModulo(long number) {

    ArrayList<Integer> result = new ArrayList<>();

    while (number > 0) {
      int digit = (int) (number % 10);
      result.add(digit);
      number /= 10;
    }
    return result; // LSD at start of list
  }
Run Code Online (Sandbox Code Playgroud)

通过Long.MAX_VALUE10,000,000 次测试每种方法,字符串版本需要 2.090 秒,模版本需要 2.334 秒。(在 Eclipse Neon 中运行的 64 位 Ubuntu 上的 Oracle Java 8)

所以实际上并不多,但我有点惊讶 String 更快


yav*_*voh 5

假设该数字是一个开头的整数:

int num = 56;
String strNum = "" + num;
int strLength = strNum.length();
int sum = 0;

for (int i = 0; i < strLength; ++i) {
  int digit = Integer.parseInt(strNum.charAt(i));
  sum += (digit * digit);
}
Run Code Online (Sandbox Code Playgroud)