假设我有一个来自用户的电话号码,例如: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);
}
}
答案 0 :(得分: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 );
}