軟體工程結對開發——一維最大子數組求和溢出問題

來源:互聯網
上載者:User

標籤:

一、題目要求

  題目:返回一個整數數組中最大子數組的和。
  要求:
    要求程式必須能處理1000 個元素;
    每個元素是int32 類型的;
    輸入一個整形數組,數組裡有正數也有負數。
    數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。
    求所有子數組的和的最大值。要求時間複雜度為O(n)。

二、設計思路

  將數組第一個和第二個數置為2的63次方,觀察結果是否溢出。

三、原始碼

 1 package com.java.lianxi; 2  3 import java.util.Scanner; 4  5 public class lianxi4 { 6     public static void main(String[] args) 7     { 8         int num,i; 9         long sum=0;10         long max;11         Scanner cin=new Scanner(System.in);12         System.out.print("請輸入數組的長度:");13         num=cin.nextInt();14         long array[]=new long[num];15         array[0]=(long)Math.pow(2,63);16         array[1]=(long)Math.pow(2,63);17         max=array[0];18         for(i=2;i<num;i++)19         {20             if((int)(Math.random()*2)==0)21             {22                 array[i]=(long)(Math.random()*100000000);23             }24             else25             {26                 array[i]=-(long)(Math.random()*100000000);27             }28         }29         for(i=0;i<num;i++)30         {31              if(sum<=0)32              {33                  sum=array[i];  34              }35              else36              {37                  sum=sum+array[i];38              }39              if(sum>max)40              {41                  max=sum;42              }43         }44         if(max==(long)Math.pow(2,63))45         {46             System.out.println("大數溢出");47             System.out.print("子數組和的最大值為:"+max);48         }49         else50         {51             System.out.print("子數組和的最大值為:"+max);52         }53     }54 55 }

四、運行結果

五、心得體會

  通過測試,發現當溢出時,最大子數組的和恒為2的63次,也就是long型所能表示的最大整數,出現大數溢出,所得的不是我們想要的結果。

我們想了很久也沒有想出來有什麼解決辦法,因為資料類型所能表示的數就那麼大,但是如果想得到正確的結果,我們可以不輸出一個最終結果,可以輸出幾個數相加,

但是考慮到相加的幾個數都要控制在2的63次方之內。

    還想了一個就是可以把最後結果當成兩個變數來顯示,高位放在其中一個變數,低位放在另一個變數,但是我們都沒有實現。

軟體工程結對開發——一維最大子數組求和溢出問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.