2017-05-10 10 views
1

と大きな整数を合計私は、forループを入れ子にしている:のJava - 伝統的な方法

String s1 = "4412"; 
String s2 = "0123"; 

int k = 0, l = 0, i3 = 0; 

for (int i = s1.length() - 1; i < s1.length(); i--) { 

    for (int j = s2.length() - 1; j <= i; j--) { 

     k = Integer.parseInt(Character.toString(s1.charAt(i))); 
     l = Integer.parseInt(Character.toString(s2.charAt(j))); 

     i3 = k + l; 

     System.out.println(i3); 

    } 
} 

私は出力として234を取得しています。このプログラムを実行していたとき。 s1とs2の最後の要素値をとるためです。 S2は次のようにループを繰り返し続けます。

1 
321 
2 
321 
. 
. 

2 + 3,2 + 2,2 + 1はこのようになります。しかし、私が期待しているのは、 4412 + 123 = 4535

誰でも助けてくれます。事前のおかげ

+4

なぜタグC? –

+0

@SouravGhosh SOがタグを追加するよう頼んでいるので、私はすべてのことを聞いたことがあるすべての言語にタグを付けます! * Sigh * –

+0

@AjayBrahmakshatriya _grrrrrrrr_ –

答えて

0

にあなたはこのようなあなたの配列を投げ逆文字列とループとのスプリットを使用coud:

String s1 = "4421"; 
String s2 = "321"; 
//reverse and split your string 
String[] spl1 = new StringBuilder(s1).reverse().toString().split("");//[1,2,4,4] 
String[] spl2 = new StringBuilder(s2).reverse().toString().split("");//[1,2,4,4] 
String result = ""; 
int max = spl1.length > spl2.length ? spl1.length : spl2.length; 
for (int i = 0; i < max; i++) { 
    int k = spl1.length <= i ? 0 : Integer.parseInt(spl1[i]); 
    int l = spl2.length <= i ? 0 : Integer.parseInt(spl2[i]); 
    result += (k + l) + ""; 

} 
System.out.println(result);//result 2474 

アイデアがある:

    あなたの文字列逆転
  1. 12345 - > 54321
  2. あなたの文字列を分割する[5,4,3,2,1]
  3. あなたの配列の最大値を見つける
  4. ループがあなたの配列をスローし、入力が存在しない場合は加算を行います。0、spl1.length <= i ? 0 : Integer.parseInt(spl1[i]);
  5. 結果に加算を加えます。

編集

Lets back to school

Addition

あなたの代わりにこれを使用することができ、アイデアは単純です:

String s1 = "5768956788678907689076890076544765433564376543564"; 
String s2 = "657687986578905438732902587349320254893"; 
String[] spl1 = new StringBuilder(s1).reverse().toString().split(""); 
String[] spl2 = new StringBuilder(s2).reverse().toString().split(""); 
String result = ""; 
int max = spl1.length > spl2.length ? spl1.length : spl2.length; 
int rest = 0; 
int sum; 
for (int i = 0; i < max; i++) { 
    int k = spl1.length <= i ? 0 : Integer.parseInt(spl1[i]); 
    int l = spl2.length <= i ? 0 : Integer.parseInt(spl2[i]); 

    sum = k + l + rest; 
    if (sum > 9) { 
     rest = 1; 
     sum = sum - 10; 
    } else { 
     rest = 0; 
    } 
    result = (i + 1 == max ? sum + rest * 10 : sum) + result; 

} 
System.out.println(result); 
+0

お返事ありがとうございます。ここでは、4421 + 321 = 4535という2つの整数を追加したいと考えています。 – Chocopie

+0

あなたは私に冗談を言っているのですが、なぜあなたはそれをしてストリングを解析するのですか?結果を得るために+ bを使います@Chocopie –

+0

あなたを苛立たせます。実際に私のアイデアint int i = 5768956788678907689076890076544765433564376543564、int j = 657687986578905438732902587349320254893のような大きな整数を追加することです。だから明らかに整数に収まらないので、文字列を取った。だから私はあなたに理解させるために小さな例を試しています。 – Chocopie

0

これらのコードを試してください

String s1 = "4412"; 
    String s2 = "0123"; 
    int k = 0, l = 0; 

    int num1 = 0, num2 = 0, length = 0; 
    length = s1.length() > s2.length() ? s1.length() : s2.length(); 
    for (int i = 0; i < length; i++) { 
     if (i < s1.length()) { 
      k = Integer.parseInt(Character.toString(s1.charAt(i))); 
      num1 = num1 * 10 + k; 
     } 
     if (i < s2.length()) { 
      l = Integer.parseInt(Character.toString(s2.charAt(i))); 
      num2 = num2 * 10 + l; 
     } 
    } 
    int result = num1 + num2; 
    System.out.println(num1 + "+" + num2 + "=" + result); 
+0

'String s1 =" 5768956788678907689076890076544765433564376543564 "で試しましたか? 文字列s2 = "657687986578905438732902587349320254893"; '? –

+0

これはBigIntegerを使うことができるので、文字列charをcharで解析する必要はありません。 –

+0

bigintegerはこの問題を解決するのに十分ではありませんあなたはそれを試してみましたか? –

関連する問題