求一维数组最大子数组和判断溢出
一题目
一.实验要求
求一维数组最大子数组和
要求: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 }
四.运行截图
五.实验总结
虽然这次实验要求的没有像预期那样让每个功能都实现,但是这次实验让我了解了如果数据过多数值过大,会对程序造成什么样的影响,要想解决溢出问题还要继续学习,多实践,现在才知道这是一个不可忽视的问题,在以后的编程中非常值得注意。
六.合影