结对开发—一维数组之大数溢出

结对成员:信1201-1班    黄亚萍

              信1201-1班    袁亚姣

一、题目要求

      题目:返回一个整数数组中最大子数组的和。
      要求:
            要求程序必须能处理1000 个元素;
            每个元素是int32 类型的;
            输入一个整形数组,数组里有正数也有负数。
            数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
            求所有子数组的和的最大值。要求时间复杂度为O(n)。

二、设计思路

     当对1000个数的数组求最大子数组的和,若随机生成的数溢出,则结束该程序。

三、源程序代码

 

 1 // jie.cpp : Defines the entry point for the console application.
 2 //
 3 
 4 #include "stdafx.h"
 5 #include "stdlib.h"
 6 #include"iostream.h"
 7 #include"math.h"
 8 #include"time.h"
 9 # define N 10000
10 int sum1(int k,int a[],int number)
11 {
12     int x=0;
13     for(int i=k;i<=number+k-1;i++)    //数组维数为number
14     {
15         x=x+a[i];
16     }
17     return x;
18 }
19 int Largest(int list[],int length)
20 {
21     int sum[N],max1[N];
22     int i,max;
23     for(i=1;i<=length;i++)       //元素个数为i
24     {    
25         cout<<"子数组中元素的个数数为"<<i<<"时,子数组的和的最大值为";
26         for(int j=1;j<=length-i+1;j++)   //子数组的第j个元素,求最大值
27         {
28             
29             sum[j]=sum1(j,list,i);
30             
31                 if(sum[j]>=max1[i])
32                 {
33                     max1[i]=sum[j];
34                 }
35         }
36         cout<<max1[i]<<endl;
37     }
38 
39     max=max1[1];
40     for(int k=1;k<=length;k++)
41     {
42         if(max1[k]>=max)
43         {
44             max=max1[k];
45         }
46     }    
47     return max;
48 }
49 
50 int main(int argc, char* argv[])
51 {
52     int i,number;
53     int max;
54     srand( (unsigned)time( NULL ) );
55     cout<<"输入这组数的个数:";
56     cin>>number;
57     cout<<endl;
58     int list[N];
59     cout<<"输入这组数:"<<endl;
60     for(i=1;i<=number;i++)
61     {
62         cout<<""<<i<<"个数:";
63         list[i]=rand()%12345678912345678934+2147483646;
64         if(list[i]<0)
65         {
66             cout<<"数据溢出"<<endl;
67             exit(0);
68         }
69         else
70         {
71             cout<<list[i];
72         }
73         
74         cout<<endl;
75     }
76     cout<<"最大值为:"<<Largest(list,number)<<endl;
77     cout<<endl;
78     return 0;
79 }

 

四、运行结果

    

五、总结与心得

      在本次实验中,我们只实现了捕捉溢出的数据。当发现有溢出时,直接结束程序,未能实现对数据的处理,使得程序继续运行,还有待优化。

     

posted @ 2015-03-30 13:09  快乐宝贝hyp  阅读(156)  评论(1编辑  收藏  举报