2

私は、適切にフォーマットされた文字列として任意のサイズの「数値」を取得するコースの課題に取り組んでいます。それぞれがすべての桁を個別の数値として取り込む 3 つのスタックを使用します。スタック 1 は最初の値を取得し、スタック 2 は 2 番目の値を取得し、スタック 3 は結果の値をプッシュして文字列にポップします。最後に、文字列が画面に出力されます。

これに関する私の問題は、「1つを運ぶ」能力です。たとえば、プログラムに7と15を追加するとします。私のプログラムは、7と5の両方をスタック1と2からそれぞれポップして、それを合計して12を取得します。これは私の問題は、1 つがまだスタック上にあることがわかり、1 つが実際には 10 の位の数字であることを認識する方法が必要なため、私の問題が始まります。

これは、メイン メソッドからコマンド ライン引数を受け取る加算メソッド全体の投稿ですが、それは本当に重要ではありません。できるだけ徹底的にしようとしています。

私が徹底的に説明し、皆さんが私の質問を理解してくれたことを願っています。この件についてさらに詳しく説明させていただきます.

private static void addlargeNumbers(String x, String y)throws ParseException{
    String o = x.replaceAll(",", "");
    String t = y.replaceAll(",", "");
    String r = "";
    Stack<Integer> one = new Stack<Integer>();
    Stack<Integer> two = new Stack<Integer>();
    Stack<Integer> resstack = new Stack<Integer>();


    int i = 0, j = 0;

    while(i < o.length()){
        one.push(Character.getNumericValue(o.charAt(i)));
        i++;
    }
    while(j < t.length()){
        two.push(Character.getNumericValue(t.charAt(j)));
        j++;
    }
    while(!one.isEmpty() || !two.isEmpty()){
        if(!one.isEmpty() && !two.isEmpty()){
            resstack.push(one.pop() + two.pop());

        }


        else if(one.isEmpty()){
            resstack.push(two.pop());
        }
        else{
            resstack.push(one.pop());
        }
    }
    while(!resstack.isEmpty()){
         r += resstack.pop();
    }

    if(!x.isEmpty() && !y.isEmpty()){
    System.out.printf("%s + %s = %s\n", x, y, r );
    }
    else if(x.isEmpty()){
        System.out.printf("%s = %s\n", y, r);
    }
    else{
        System.out.printf("%s = %s\n", x, r);
    }
}

私の質問は答えられました。助けてくれてありがとう。

4

2 に答える 2

0

次のようにキャリーを処理するには、新しい変数を追加する必要があります

int  carry = 0;

そして、必要に応じてキャリーを計算して含める必要があります。

int carry=0, num1, num2, sum;
if(!one.isEmpty() && !two.isEmpty()){
    num1 = one.pop();
    num2 = two.pop();

    // Add previous carry if any. Would be `0` for first run
    sum = (num1 + num2 + carry)/10;

    // calculate and store it for next iteration
    carry = (num1 + num2 + carry)%10;

resstack.push(sum);
}

ifまた、いずれかのスタックが空でない場合に注意するために、追加した他の 2 つの と同様の行にロジックを含める必要があります。

于 2012-12-11T06:56:47.883 に答える
0

前の短い長さの文字列に0の数を追加して、両方の文字列を同じ長さにします。次に、文字をスタックに入れます。その後、ライターの結果が得られます

public void makeEqualSize(文字列 str1,文字列 str2){
        int num=Math.abs(str1.length()-str2.length());
        文字列 str3="";
        if(str1.length() < str2.length()){
            for(int i=0;i < num;i++){
                str3+="0";
            }
            str1=str3+str1;
        }そうしないと{
            for(int i=0;i <num;i++){
                str3+="0";
            }
            str2=str3+str2;
        }

    }

于 2012-12-11T07:01:32.253 に答える