如何在Java中仅打印反转数字的3位数字(假设数字有4位数字)

时间:2019-04-14 18:57:50

标签: java reverse

假设我有一个来自用户的电话号码,例如:456789。 我知道如何反向打印数字,但是我不确定如何停止执行以仅打印3个第一个反向数字。 我的意思是我只想从给定的数字打印987

我不得不以某种方式停下来休息;但我不确定如何。

public static void main(String[] args) {

    int number= 0;
    int numberInReverse = 0;
    System.out.println("Input a number");
    Scanner sc=new Scanner(System.in);
    numar=sc.nextInt();

    while (number !=0){
        numberInReverse*=10;
        numberInReverse=numar%10;
        number/=10;
        System.out.print(numberInReverse);
    }
}

4 个答案:

答案 0 :(得分:3)

您可以遵循以下算法:

  1. 将数字乘以1000
  2. 逆转
  3. 打印

答案 1 :(得分:0)

您可以将其转换为StringBuilder并使用reverse()substring()

String result = new StringBuilder()
        .append(numar)
        .reverse()
        .substring(0, 3);
System.out.print(result);

答案 2 :(得分:0)

    System.out.println("Input a number");
    Scanner sc = new Scanner(System.in);

    int num = sc.nextInt();
    int reversed = 0, counter = 0;

    while (counter++ < 3) {
        int digit = num % 10;
        reversed = reversed * 10 + digit;
        num /= 10;

    }

    System.out.println("Reversed Number: " + reversed);

答案 3 :(得分:0)

例如num = 456789
我们有:
a)我们做整数除法时的商为45678,即456789/10
b)当我们使用Modulus运算符时,余数为9,即456789%10

如果我们将“新”数字更新为商并通过迭代, 下表显示了它的外观:

digit number   quo   rem  Observations
----- ------ -----   ---  --------------------------------------------
  1   456789 45678    9
  2    45678  4567    8
  3     4567   456    7   STOP for 3 digits, i.e. number of iterations
  4      456    45    6
  5       45     4    5
  6        4     0    4   BREAK when variable 'quo' equals ZERO

对于第一种方法,请考虑从您的main()调用以下方法:

static void firstApproach(){
    int num= 456789;
    int quo= num / 10;
    int rem= num % 10;

    System.out.println( num + " | " + quo + " | " + rem );
}

这是我们得到的输出:

456789 | 45678 | 9


现在,考虑通过main()调用此方法进行第二次迭代:

static void secondIteration() {
    int num= 456789;
    int quo= num / 10;
    int rem= num % 10;
    System.out.println( num + " | " + quo + " | " + rem );

    num= quo;
    quo= num / 10;
    rem= num % 10;
    System.out.println( num + " | " + quo + " | " + rem );
}

这是两次迭代的输出:

456789 | 45678 | 9
 45678 |  4567 | 8


进行第三次迭代:

static void thirdIteration() {
        int num= 456789;
        int quo= num / 10;
        int rem= num % 10;
        System.out.println( num + " | " + quo + " | " + rem );

        num= quo;
        quo= num / 10;
        rem= num % 10;
        System.out.println( num + " | " + quo + " | " + rem );

        num= quo;
        quo= num / 10;
        rem= num % 10;
        System.out.println( num + " | " + quo + " | " + rem );

        // ... and so on ...
    }

输出,经过3次迭代:

456789 | 45678 | 9
 45678 |  4567 | 8
  4567 |   456 | 7


查看第三次迭代的代码,观察以下应该在循环体内的重复模式:

num= quo;
quo= num / 10;
rem= num % 10;


如果我们尝试指定一些不合理的数字,对于456789的相同示例,则说10怎么办?

这就是循环需要两个停止条件(以先发生者为准)的原因,即:
-当达到指定位数时(在示例中为3);
-商为零(因此break;)。


下面的reverse()方法显示了一个while()循环,其中所有变量均已正确初始化以避免任何意外。变量digit是控制循​​环的迭代次数并在最后增加的变量:

static int reverse( int number, int numDigits ){
    int res= 0;
    int quo= number / 10;
    int rem= number % 10;

    int digit= 1;
    while( (digit <= numDigits) && (quo != 0) ){
        res= 10*res + rem;

        number= quo;
        quo= number / 10;
        rem= number % 10;

        digit= digit + 1;
    }

    return res;
}


可以从reverse()调用上述main()方法:

public static void main( String args[] ){
    // firstApproach();
    // secondIteration();
    // thirdIteration();

    int result= reverse( 456789, 3 );  // reverses 456789, upto 3 digits
    System.out.println(  result );
}