2017-05-10 27 views
1

爪哇 - 总结大整数与我有嵌套for循环传统的方式

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我会标记每一种我听说过的语言,因为它要求我添加标签! *叹息* –

+0

@AjayBrahmakshatriya _grrrrrrrrr_ –

回答

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知道。 – Chocopie

+0

你在开玩笑吗,那你为什么要这样做,并解析你的字符串?然后用a + b得到结果@Chocopie –

+0

抱歉让你烦恼。其实我的想法是添加大整数像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”; String s2 =“657687986578905438732902587349320254893”;'? –

+0

为此您可以使用BigInteger,不需要通过char解析字符串char。 –

+0

没有biginteger是不足以解决这个问题,你尝试过吗? –