Java大數加法運算
阿新 • • 發佈:2019-01-10
public class LargeCalculate { //把字串以字元形式放進棧中 public Stack stringToStack(String str) { Stack stack=new Stack(); for(int i=0; i<str.length(); i++) { char c=str.charAt(i); if(c>='0' && c<='9') stack.push(Integer.valueOf(String.valueOf(c))); else continue; } return stack; } //大數相加 public String add(String a, String b) { Stack stackA=stringToStack(a); //存放第一個數 Stack stackB=stringToStack(b); //存放第二個數 Stack stackSum=new Stack(); //存放結果和 int tempSum; //兩位數求和 boolean isCarry=false; //進位標誌 while(!stackA.isEmpty() && !stackB.isEmpty()) { tempSum=(Integer)stackA.pop()+(Integer)stackB.pop(); //若有進位,加1 if(isCarry) { tempSum++; isCarry=false; } //位數和大於10,個位數入棧,標誌進位 if(tempSum>=10) { tempSum-=10; stackSum.push(tempSum); isCarry=true; } else { stackSum.push(tempSum); } } //取不為空的棧 Stack stackTemp=!stackA.isEmpty()?stackA:stackB; while(!stackTemp.isEmpty()) { //若原先有進位 if(isCarry) { int end= (Integer)stackTemp.pop(); //取出棧中的數 ++end; if(end>=10) //大於10,進位 { end-=10; stackSum.push(end); } else //小於10,直接入棧 { stackSum.push(end); isCarry=false; } } //若原先無進位 else { stackSum.push(stackTemp.pop()); } } //最高位有進位時,直接最後一個數為1 if(isCarry) stackSum.push(1); //把棧中結果轉為字串 String result=new String(); while(!stackSum.isEmpty()) { result=result.concat(stackSum.pop().toString()); } return result; } public static void main(String[] args) { LargeCalculate largeCalculate=new LargeCalculate(); String a="6 293 379 654 943 111 722 643 403"; String b="1 523 502 388 432 201 489 337 789"; System.out.println("和為: "+largeCalculate.add(a,b)); } }
執行結果: