如何编写一个程序来反转用户输入的数字

时间:2012-10-23 07:47:21

标签: java math

家庭作业问题是用户输入一个号码。然后你必须编写一个反转该顺序的程序。因此,如果用户输入7364,则必须编写一个程序,在下一行显示4637。我想我已经找到了解决方案,但我不确定如何写它。

由于最后一个数字是相反顺序的第一个数字,这意味着如果某人输入7364意味着我想获得4637.我必须编写一个程序,将4乘以1000,6乘以100,3乘10和7然后加1来获得4637.我不是100%确定如何做到这一点。令我感到困惑的是如何将一个数字乘以1000,将下一个数字乘以100,将下一个数字乘以10,将下一个数字乘以1然后将它们相加。

import acm.program.*;
public class ReverseNumber extends ConsoleProgram{
    public void run(){

    int n = readInt("please enter any positive number: ");

    int total = 0;


    while ( n > 0){
    total = total + n % 10;    <----?
    n = n * 1000;         <----?
      }
    println("the reverse order is" + total); 

   }

  }

7 个答案:

答案 0 :(得分:3)

使用库进行此操作的最简单方法。

System.out.println(new StringBuilder(String.valueOf(i)).reverse());

答案 1 :(得分:2)

试试这个:

while( n != 0 )
{
    reverse = reverse * 10;
    reverse = reverse + n%10;
    n = n/10;
}

逻辑是从单位开始在每次迭代中获得一个数字,直到遇到所有数字。

n是输入号。 reverse是在n完成后存储while的反转的变量。

%运算符与10一起使用时,会为您提供单位处的数字。 {10}运算符与{10}一起使用时,除了单位处的数字外,还包括所有数字。

/n = 7364

在第一次迭代中,循环将如下所示:

reverse = 0

在第二次迭代中:

while(7364 != 0) // true
{
    reverse = 0 * 10; // reverse = 0
    reverse = 0 + 7364%10 // reverse = 4
    n = 7364/10 // n = 736
}
第三次迭代

while(736 != 0) // true
{
    reverse = 4 * 10; // reverse = 40
    reverse = 40 + 736%10 // reverse = 46
    n = 736/10 // n = 73
}
第四次迭代

while(73 != 0) // true
{
    reverse = 46 * 10; // reverse = 460
    reverse = 460 + 73%10 // reverse = 463
    n = 73/10 // n = 7
}

在第5次迭代中:

while(7 != 0) // true
{
    reverse = 463 * 10; // reverse = 4630
    reverse = 4630 + 7%10 // reverse = 4637
    n = 7/10 // n = 0
}

我们有while(0 != 0) // false and loop ends { ... }

答案 2 :(得分:2)

好吧,要扭转这个数字,最简单的解决方案是将它转换为字符串,然后将第一个字母添加到最后一个字母,直到你到达最后一个字母或数字为止。此外,您可以使用乘法部分执行相同的操作。逐个获取数字作为字符串将其转换回int然后乘以并添加。

编辑:如果你不能使用字符串。这是一个有点数学解决方案。

int num = 123456; // any number than you want to reverse
string revnum = ''; // the reversed number
int temp = 0;
do {
 temp= (temp*10)+(num%10);
 num = (int)(num/10);
}while(num>0){
 revnum = revnum + temp;
}

答案 3 :(得分:1)

这应该有效:

    total = 0;
    while (n > 0) {
        total = total * 10 + n % 10;
        n = n / 10;
    }
    println("the reverse order is " + total); 

您不必知道原始数字中有多少位数,无论如何都要遍历所有数字。这是发生的事情:

  • 获得新数字(n % 10)后,将结果乘以10并将其添加到数字中。这样,您可以偏移结果中的数字。
  • 然后通过执行n / 10从原始号码中删除最后一位数字(您之前在步骤中添加的数字)。

答案 4 :(得分:0)

你必须用int表示吗?字符串似乎更自然?

如果坚持使用int,则需要跟踪要乘以的因子:这意味着每次迭代乘以10的另一个变量。

答案 5 :(得分:0)

Int转换为String,然后将其放入StringBuffer 然后使用.reverse()

我不想添加代码,因为有很多样本。 像这样one

之后,您可以将其再次转换为String

答案 6 :(得分:0)

public class value{

   public static void main(String[] args){

    int n=Integer.parseInt(args[0]);
    int t=0;

    do{
        t=n%10;
        System.out.print(t);
        n=n/10;
    }while(n>0);


}
}