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语言与汇编的嵌入式编程:统计字符串中各字符出现的次数
    一个汇编小demo
    C语言与汇编的嵌入式编程:求100以内素数
    TCP网络调试助手上提示错误:“1035 未知错误”的有效解决方法,本人实测确实可行
    一个支持国密SM2/SM3/SM4/SM9/ZUC/SSL的密码工具箱
    DRM(device resource management)介绍
    TODO
    pinctrl(1)——pinctrl子系统的使用
    GPIO使用总结
    Gerrit使用技巧
  • 原文地址:https://www.cnblogs.com/wang321/p/4378583.html
Copyright © 2011-2022 走看看