標籤:
使用Stack堆棧集合大資料運算
package com.sta.to; import java.util.Iterator; import java.util.Stack; public class DaMax { public void jiaFa(String value1, String value2) { /** * 更多資料歡迎瀏覽凱哥學堂官網:http://kaige123.com * @author 小沫 */ // 把字串用toCharArray拆成字元 char[] c1 = value1.toCharArray(); char[] c2 = value2.toCharArray(); // 申請好2個Stack集合準備把字元放進去 Stack numvalue1 = new Stack();Stack numvalue2 = new Stack(); // 進棧 for (char c : c1) {numvalue1.push(c);} for (char c : c2) {numvalue2.push(c);} //new好一個緩衝池,接收sum StringBuffer buffer = new StringBuffer(); int jw = 0;//進位 //用常用類Math擷取最長的長度 int count = Math.max(c1.length, c2.length); //把長的拿來迴圈 for (int i = 0; i < count; i++) { //用來存放出棧的值 int num1; int num2; //每一次出棧的值轉為int 才能進行運算 try {num1 = Integer.parseInt(numvalue1.pop().toString());} catch (Exception e) {num1 = 0;//如果異常那就拋出0 } try {num2 = Integer.parseInt(numvalue2.pop().toString());} catch (Exception e) {num2 = 0;} //把num1和num2引用的值加上jw交給sum int sum = num1 + num2 + jw; if (sum >= 10) { //sum大於或等於10 那就要先前一位元進1 jw = 1;buffer.append(sum % 10);//把總和用取摸後的餘數放進緩衝池 } else {jw = 0;//不大於或等於10 jw就為0 直接把總和交給緩衝池 buffer.append(sum);}} if (jw == 1) { //問jw還等不等於1,還等於說明最前位元需要多個1 如 99+1=100 buffer.append(1);}buffer.reverse();// 把數值反過來 System.out.println(buffer);}}
測試類別:
package com.sta.to; import java.nio.Buffer; public class Test { public static void main(String[] args) {DaMax ys = new DaMax();ys.jiaFa("10", "5");//10+5 ys.jiaFa("15", "50");//15+50 ys.jiaFa("999999999999999", "1");//999...+1 ys.jiaFa("99", "1");//99+1 ys.jiaFa("80", "80");//80+80 ys.jiaFa("8", "7");//8+7 }}
使用Stack堆棧集合大資料運算