结对开发处理溢出

组员:燕亚峰  20122914  

        王童博   20122823

一、题目及要求:

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

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

              每个元素是int32 类型的;

           输入一个整形数组,数组里有正数也有负数。

          数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

          求所有子数组的和的最大值。

二、设计思路:

      定义无符号长整型数组,长度设为1000;若所求子数组最大和的过程中出现sum〉LONG_MAX;则为溢出。输出溢出,程序无法计算结果。

三、源程序

#include<iostream.h>
#include<stdlib.h>
unsigned long max1(unsigned long arry[],int length)   
{
    unsigned long sum=arry[0];
    unsigned long maxsum=arry[0];
    int flag =0;
    for(int i=1;i<length;i++)
    {
        if(sum<0)
        {
            sum=arry[i];
        }
        else
        {
            sum=sum+arry[i];
            if(sum>LONG_MAX)
            {
                cout<<"溢出,出错,无法计算"<<endl;
                flag=1;
                break;
            }
        }
        if(maxsum<=sum)
        {
            maxsum=sum;
        }
    }
    if(flag==1)
    {
        cout<<"无返回值";
        return 0;
    }
    else
    {
       return maxsum;
    }
}

int main()
{
    srand((unsigned)time(0));
    unsigned long a[1000];
    for(int i=0;i<1000;i++)
    {
        a[i]=(unsigned long)rand()%5+4294967290;
        cout<<a[i]<<"  ";
    }
    unsigned long q=max1(a,1000);
    cout<<endl;
    cout<<q;
    return 0;
}

四、截图

五、实验心得

  这次实验要求实现1000个数,经过和童博商量,决定通过定义长度为1000的数组这个办法。定义无符号32位长整型,只验证了正数溢出的情况,对于负数溢出,没有做出验证这是个缺陷。我感觉一个团队不仅要团结,要么每一个队员都努力,同事还要有自己的特色。

六、合照

原文地址:https://www.cnblogs.com/yanyafeng/p/4378671.html