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

さて、数字を逆にするための最も簡単な解決策は、それを文字列に変換して最初の文字を取得し、この場合は最後の文字または数字に到達するまで最後に追加することです。また、掛け算の部分でもほぼ同じことができます。文字列として数値を1つずつ取得し、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 に答える
2

これを試して:

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

論理は、すべての桁に遭遇するまで、単位の場所から開始して、各反復で1桁を取得することです。

n入力番号です。 終了後にのreverseが格納されるreverse変数です。nwhile

%演算子を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
}

2回目の反復で:

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

3回目の反復で:

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

4回目の反復で:

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 に答える
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

に変換IntString、それを入れてStringBuffer から使用します.reverse()

このためのサンプルがたくさんあるので、コードを追加したくありません。このよう

その後、もう一度に変換できますString

于 2012-10-23T07:53:02.670 に答える
0

それをintで表す必要がありますか?文字列はもっと自然に見えますか?

intに固執する場合は、乗算する係数を追跡する必要があります。これは、反復ごとに10を乗算する別の変数を意味します。

于 2012-10-23T07:50:12.460 に答える
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 に答える