0

我想在 Java 中创建一个循环,它在数学上采用一个变量,比如一百万,然后通过下面程序和表中详述的步骤来减少它。

package com.sbs.test.maths;

import org.testng.annotations.Test;

public class Maths {
  @Test
  public void test() {
    int i = 1000000;
    System.out.println( i );
    while( i > 1 ) {
      i = reduce( i );
      System.out.println( i );
    }
  }

  private int reduce( int value ) {
    if ( value > 1 && value <= 10 ) value -= 1;
    else if ( value > 10 && value <= 100 ) value -= 10;
    else if ( value > 100 && value <= 1000 ) value -= 100;
    else if ( value > 1000 && value <= 10000 ) value -= 1000;
    else if ( value > 10000 && value <= 100000 ) value -= 10000;
    else if ( value > 100000 && value <= 1000000 ) value -= 100000; 
    else if ( value > 1000000 && value <= 10000000 ) value -= 1000000; 
    else if ( value > 10000000 && value <= 100000000 ) value -= 10000000; 
    return value;
  }
}

IE

value     reduce-by   result
1000000 - 100000    = 900000
900000  - 100000    = 800000
...
200000  - 100000    = 100000
100000  - 10000     = 90000
90000   - 10000     = 80000
...
20000   - 10000     = 10000
10000   - 1000      = 9000
9000    - 1000      = 8000
...
2000    - 1000      = 1000
1000    - 100       = 900
900     - 100       = 800
...
200     - 100       = 100
100     - 10        = 90
90      - 10        = 80

如果检测数量是 100、1000、10000、100000 或更多,这可以在没有令人讨厌的 if 级联的情况下完成吗?

我找到了一个几乎可以在 Java 中工作的javascript 示例,但它并不适用于所有变体。我在下面运行了程序,但正如您将看到的,它卡在了我们需要在减少结束时丢失零的点。

System.out.println( "----------------------------------------------" );
for ( int i = 1000000; i > 0; i -= (int) Math.pow( 10, Math.floor( Math.log( i ) / Math.log(10) ) ) ) {
  System.out.println( i );
}

输出:

1000000
900000
800000
700000
600000
500000
400000
300000
200000
100000

不幸的是,数学不是我的强项,因此非常感谢您对此的任何帮助。

谢谢!

4

2 回答 2

3

我在java中不是那么好,但是两个嵌套循环可能会起作用并且更简单:

for ( int i = 1000000; i > 1; i /= 10 ) {
  for ( int j = i; j > i / 10; j -= i / 10 ) {
    System.out.println( j );
  }
}
System.out.println( 1 );
于 2013-01-25T12:01:36.013 回答
2
    int total = 1000000;
    int reducedBy = 100000;
    while (total > 0 && reducedBy >= 1) {
        System.out.println(total);
        total -= reducedBy;
        if (total == reducedBy)
            reducedBy /= 10;
    }
    System.out.println(total);

万一你还需要它。

于 2013-01-25T12:15:14.217 回答