1

作业问题是用户输入一个数字。然后你必须编写一个颠倒这个顺序的程序。因此,如果用户输入 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); 

   }

  }
4

7 回答 7

3

使用库的最简单方法。

System.out.println(new StringBuilder(String.valueOf(i)).reverse());
于 2012-10-23T08:01:43.103 回答
2

尝试这个:

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

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

n是输入编号。 是完成后存储reverse反向的变量。nwhile

%运算符与 10 一起使用时,为您提供单位位置的数字。 /运算符与 10 一起使用时,为您提供除个位数字以外的所有数字。

何时n = 7364reverse = 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
}

在第四次迭代中:

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

在第 5 次迭代中:

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

我们有reverse = 4637

于 2012-10-23T07:51:46.837 回答
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;
}
于 2012-10-23T07:54:01.340 回答
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
于 2012-10-23T07:50:54.957 回答
0

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

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

于 2012-10-23T07:50:12.460 回答
0

将 to转换IntString,然后放入 a StringBuffer then 使用.reverse()

我不想添加代码,因为有很多示例。喜欢这个

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

于 2012-10-23T07:53:02.670 回答
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);


}
}
于 2013-11-20T05:40:46.990 回答