结对编程之数组长度要求和大数溢出

1.题目:

返回一个整数数组中最大子数组的和。

2.要求:

1)要求程序必须能处理1000个元素;

2)每个元素都是int32类型的。

3.设计思路:

处理1000个元素时让用户自己输入想要的数组长度,看看运行时出处理时间的长短,再在源程序中改善这一问题。

处理大数溢出时,由于随机函数生成的数不算太大,我们尽量让其最终存入数组的元素接近最大范围,进而求和时才可能出现大数溢出的情况。

4.源代码:

 1 #include<iostream>
 2 #include<stdlib.h>
 3 using namespace std;
 4 #include <ctime>
 5 #include <cstdlib>
 6 #define MAX 100000
 7 int main()
 8 {
 9     int k,t=0,o=0;
10     int n=0,m=0;
11     int b[MAX];
12     int a[MAX];
13     cout<<"请输入数组中整数的个数:"<<endl;
14     cin>>k;
15     srand(time(0));
16     for(int i=0;i<k;i++)
17     {
18         a[i]=rand()%100-50;
19         cout<<a[i]<<" ";
20     //    cin>>a[i];
21     }
22     
23     for(int l=1;l<k+1;l++)
24     {
25         for(i=0;i<k-l+1;i++)
26         {
27             for(int j=i;j<i+l;j++)
28             {
29                 if(j>k-1)
30                 {
31                     break;
32                 }
33                 else
34                     m=m+a[j];
35             }
36             b[n]=m;
37             m=0;
38             n=n+1;
39         }
40     }
41     int max=b[0];
42     for(i=1;i<n;i++)
43     {
44         if(max<b[i])
45             max=b[i];
46     }
47 /*    for(i=0;i<n;i++)
48     {
49         if(max==b[i])
50         {
51             m=i;
52         }
53     }
54     m=m+1;
55     int r=k;
56     for(int j=0;j<k;j++)
57     {
58         if(m>=r&&r>=0)
59         {
60             m=m-r;
61             t=t+1;
62             r=r-1;
63         }
64         if(m==0&&r>0&&j!=k-1)
65         {
66             m=m+r+1;
67             break;
68         }
69         if(m==0&&r==0&&t==k)
70         {
71             m=m+1;
72             break;
73         }
74     }*/
75     cout<<endl;
76     cout<<"该数组中的最大子数组的和为:"<<max<<endl;
77     /*cout<<"这些数字为:";
78     m=m-1;
79     if(t==0)
80     {
81         t=1;
82     }
83     for(i=m;i<m+t;i++)
84     {
85         cout<<a[i]<<"   ";
86     }
87     for(i=0;i<n;i++)
88         cout<<b[i]<<" ";*/
89     return 0;    
90 }

5.结果截图:

技术分享

6.心得体会:

本次重点在于大数溢出的解决,我们首次实现大数溢出时多次出现程序异常关闭的情况,即使可以运行时也不提示错误。对于这一点的解决,我们想到了数组元素随机生成过大时则重新生成,也可以对结果进行判断,主动提示错误进而解决。但我们对于真正解决大数溢出还没有具体的解决方案,这算是我们的不足吧,日后一定多多注意这一点。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。