-3

我有这个程序可以在解析的 int 中找到奇数和偶数的总和,如下所示。我现在的程序是找到从右到左的总和。我如何使它从最后一个数字(即从左到右)开始?

    out.print("Please enter a number: ");
    String s = in.nextLine();
    int x = Integer.parseInt(s);
    int y = 0;
    int e = 0;
    int o = 0;
    while (x != 0) {
        y = x % 10;
        out.print(y + " ");
        if (y % 2 == 0) {
            e = e + y;
            out.print(e + " ");
        } else {
            o = o + y;
            out.print(o + " ");
        }
        x = x / 10;
    }
    out.println("sum of odd: " + o);
    out.println("sum of even: " + e);

我有点在无限循环中运行

      out.print("Please enter a number: ");
    String s = in.nextLine();
    double x = Integer.parseInt(s);
    double y = 0;
    double e = 0;
    double o = 0;
    double length = Math.pow(10, s.length() - 1);
    while (x != 0) {
        y = x / length;
        if (y % 2 == 0) {
            e = e + y;
        } else {
            o = o + y;
        }
        x = x % length;
    }
    out.println("sum of odd: " + o);
    out.println("sum of even: " + e);
4

1 回答 1

1

你可以改变你的划分方式。也许您的循环可能如下所示:

// Figure out how many digits you have.  I'll leave that to you
int digits = ...;
for(int i = digits; i < 0; i--) {
    int currentDigit = (x / Math.exp(10, i-1)) % 10;

    // You have your digit, so the checking/summing happens here.
}

例如,如果您有数字 1234。它有 4 位数字,因此循环的第一次迭代 i = 4。因此,表达式变为:

int currentDigit = (1234 / 1000) % 10;

产生 1。第二次迭代将是:

int currentDigit = (1234 / 100) % 10;

这产生 2。除法会截断您不想看到的数字的右侧,而模数会截断您不想看到的左侧。

于 2013-09-20T19:48:53.580 回答