java中實現超大整數相加減

來源:互聯網
上載者:User
 代碼如下 複製代碼
/**
   * 整數加法
   *
   * @param lv
   *            左值
   * @param rv
   *            右值
   * @param result
   *            相加的結果
   * @數值存放說明 數值的每一位作為棧的一項存放在棧中,從棧底到棧頂依次是數值的高位到低位
   * @演算法描述 輸入的加數倒序存放在棧中(即棧頂是數的最低位,棧底是數的最高位)。 計算的時候,依次彈出棧中的資料,對每一位執行加操作。
   *       若遇到進位,則將進位標誌carry設定為1,以在進行下一位計算的時候將其加上。 進位加結束後,將carry的值重設為0。
   *       每次計算都會檢查進位標誌carry的值
 */
 void plus(Stack<Integer> lv, Stack<Integer> rv, Stack<Integer> result) {
   int sum = 0;
   // 進位標誌
   int carry = 0;
   while (true) {
    try {
     // 兩個加數的長度都還不為0,繼續分別在兩個棧中取出一位相加
     if (!lv.empty() && !rv.empty()) {
      // 兩個加數取出一位值相加,再加上進位(因為在有進位時carry=1,無進位時carry=0,根據任何數與0相加都等於0,所以可以直接加上)
      sum = lv.pop() + rv.pop() + carry;
      // 進位標誌使用後,重設為0
      carry = 0;
      // 根據當前加數的和再加上進位的結果是否大於9(即10甚至更大,因為每一位加數的最大值只可能是9,所以這裡最大也只能是18)
 // 進行是否進位的判斷依據,若大於9,將當前位相加的結果減去10,並將進位標誌設定為1
      if (sum > 9) {
       sum -= 10;
       carry = 1;
      }
      result.push(sum);
      // 在兩個加數的每一位都進行了計算後,判斷是否還有進位,若有則加到結果的最高位
 // 為了在兩個加數位元(長度)不相等時能正確地計算,這個條件必需放在下面的兩個條件前面
     } else if (lv.empty() && rv.empty()) {
      if (carry == 1)
       result.push(carry);
      return;
      // 左值已經為空白(每一位都參與了計算),而右值還不為空白時,將右值的每一位取出加上進位值放到結果中
     } else if (lv.empty()) {
      sum = rv.pop() + carry;
      carry = 0;
      if (sum > 9) {
       sum -= 10;
       carry = 1;
      }
      result.push(sum);
      // 同上面左值說明
     } else if (rv.empty()) {
      sum = lv.pop() + carry;
      carry = 0;
      if (sum > 9) {
       sum -= 10;
       carry = 1;
      }
      result.push(sum);
     }
    } catch (Exception e) {
     System.err.println("棧溢出");
    }
   }
 }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.