如何在java中仅打印反向数字的3位数字(假设该数字有4位数字)



假设我有一个来自用户的数字,例如: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);
}
}

你可以按照这个算法:

  1. 将数字取模 1000
  2. 反转它
  3. 打印

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

String result = new StringBuilder()
.append(numar)
.reverse()
.substring(0, 3);
System.out.print(result);
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);

以 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;


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

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


以下reverse()方法显示了一个while()循环,其中所有变量都已正确初始化以避免任何意外。Tha 变量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 );
}

最新更新