求一维数组最大子数组和判断溢出

一题目

一.实验要求

求一维数组最大子数组和

要求:1000个数以上,32位整数

二.设计思路

因为我们的程序一开始就可以运算1000个以上数的运算,最大个数为364,526,269,原因为找出。

这次实验主要目的是解决最大值溢出的问题,本来想输出这个溢出的数值,但没有实现,于是改为若溢出,则输出提示,并返回溢出的上一个最大值。

三.代码

 1 // ketang4.cpp : 定义控制台应用程序的入口点。
 2 //张世通 梁世豪
 3 
 4 #include "stdafx.h"
 5 #include "iostream"
 6 using namespace std;
 7 
 8 
 9 /*确定求和存储数组元素*/
10 void Son(int father[],int length)
11 {
12     int MMAX=2147483580;
13     int max=father[0];
14     int add=0;                                                    //定义求和变量
15     int j;
16      for(int i=0;i<length;i++)
17      {
18         add=0;
19         for(j=i;j<length;j++)
20         {
21             add=add+father[j];
22             if(add>max&&add<MMAX)
23             {    
24                 max=add;
25             }
26             else if(add>MMAX)
27             {
28                 break;
29             }
30         }
31         if(MMAX-max<father[j+1])
32         {
33             cout<<"结果超出最大表示范围,将输出上一个最大值:"<<endl;
34             break;
35         }
36      }
37         cout<<"最大子数组的和为:"<<max<<endl;
38 }
39 
40 /*主函数*/
41 int main()
42 {
43     int length,num;                                                //定义原始数组长度length,求和存储数组长度num
44     cout<<"请输入数组元素个数:";
45     cin>>length;
46     int* father=new int[length];                                //定义原始数组
47     for(int i=0;i<length;i++)
48     {
49         father[i]=(rand()%1000)*1000000;
50     //    cout<<father[i]<<"    ";
51     }
52     cout<<endl;
53     
54     
55     Son(father,length);
56     delete []father;
57     return 0;
58 }

四.运行截图

五.实验总结

虽然这次实验要求的没有像预期那样让每个功能都实现,但是这次实验让我了解了如果数据过多数值过大,会对程序造成什么样的影响,要想解决溢出问题还要继续学习,多实践,现在才知道这是一个不可忽视的问题,在以后的编程中非常值得注意。

六.合影

原文地址:https://www.cnblogs.com/zglsh/p/4378662.html