码迷,mamicode.com
首页 > 其他好文 > 详细

处理溢出

时间:2015-03-30 18:38:02      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

一、题目及要求:

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

              要求程序必须能处理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;则溢出。经过验证也是可以的。

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

  在此附上我两帅照:

  技术分享

  

处理溢出

标签:

原文地址:http://www.cnblogs.com/wang321/p/4378583.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!