zoukankan      html  css  js  c++  java
  • 处理溢出

    一、题目及要求:

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

                  要求程序必须能处理1000个元素;②每个元素都是long类型的。

    二、设计思路:

          定义无符号长整型数组,长度设为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的数组。经过和伙伴商议,最终觉得还是用1000长度这种方法。

     对于定义无符号32位长整型,只验证了正数溢出的情况,这里利用了LONG_MAX这个界限,如果大于则说明溢出,直接跳出循环。我队友说,如果都是正数,相加,如果溢出则储存的应该是负数。定义有符号长整型。相加,如果小于0;则溢出。经过验证也是可以的。

      对于负数溢出,没有做出验证。没有考虑到。是个缺漏。

      在此附上我两帅照:

      

      

  • 相关阅读:
    C#发送邮件的实现实例解析
    抄录一下别人的经验
    centos学习一
    关于百度地图API批量转换成坐标的方法
    js和PHP等脚本语言for循环和if语句里面定义变量的作用域
    关于js中去取数组中的重复字符串
    关于handler返回的数据处理
    通过定义任务委托的方法处理 action
    关于点击按钮图片左右切换的随笔
    关于网站内容分享到新浪微博等的代码
  • 原文地址:https://www.cnblogs.com/wang321/p/4378583.html
Copyright © 2011-2022 走看看