1. 程式人生 > >Java大數加法運算

Java大數加法運算

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));
    }
}

執行結果: