zoukankan      html  css  js  c++  java
  • 结对开发_数组(溢出)

    一、设计思路

        对于大数的溢出,我们没有找到好的方法去储存,只能将临界溢出的数挨个输出。即算出int型最大的数pow(2,30),

      相加之后与之比较大小,若小于,则继续相加,否则,存到一个数组里,并在完成相加之后挨个输出。

    二、源代码

      

    # include <iostream>
    # include <time.h>
    # include <math.h>
    using namespace std;
    #define LENGTH 10
    # define TEMPLEN 100
    int Arr[LENGTH];
    int TEMP[TEMPLEN];                                //存放中间结果的数组
    int MaxSubArr(int * arr,int & count,int & temp)
    {
        int max=0;
        int flag=true;
        int max1=arr[0];                            //存储全是负数的数组中最大的值
        int k = pow(2.0,30.0);                    
        for(int i=0;i<LENGTH;i++)            //判断数组中是否全部为负数
        {
            if(arr[i]>max1)
            {
                max1=arr[i];
            }
            if(arr[i]>0)
                flag=false;
        }
        if(flag)
            return max1;
        for(int i=0;i<LENGTH;i++)
        {
            temp+=arr[i];
            if(temp>=k)
            {
                TEMP[count++]=temp;
                temp=0;
            }
            if(temp>max)
            {
                max=temp;
            }
            if(temp<0)
            {
                temp=0;
            }
        }
        return max;
    }
    
    //测试函数
    int main()
    {
        srand(time(NULL));
        int max;
        int k;
        int temp=0;                                //存放中间结果
        int count=0;                                //计算TEMP数组中存放了几个中间结果
        for(int i=0;i<LENGTH;i++)
        {
            //k=rand()%10001-5000;                //生成-5000~+5000的随机数
            int k = pow(2.0,28.0);
            Arr[i]=k;
        }
        for(int i=0;i<LENGTH;i++)
        {
            cout<<Arr[i]<<" ";
        }
        cout<<endl;
        max = MaxSubArr(Arr,count,temp);
        cout<<"最大子数组和为: ";
        for(int i=0;i<count;i++)
            cout<<TEMP[i]<<"+";
        cout<<temp<<endl;
        return 0;
    }

    三、运行结果

      

    四、总结

      我们本来的想法是用char数组来储存最后的数,但是在也有可能在中间的相加过程中也可能溢出,且用字符数组

     相加考虑到进位的问题会比较麻烦,因此舍去这种方法。最后,只能采取在临界时储存,最后再输出的方法。

  • 相关阅读:
    免费的编程中文书籍索引【转】
    Linux字符集的查看及修改【转】
    expect学习笔记及实例详解【转】
    mycat学习笔记
    Vue-loader 开启压缩后的一些坑
    使用webpack搭建vue开发环境
    基于webpack和vue.js搭建开发环境
    Sublime Text 3 常用插件以及安装方法(vue 插件)
    NodeJS、NPM安装配置步骤(windows版本)
    Https方式使用Git@OSC设置密码的方式
  • 原文地址:https://www.cnblogs.com/littlechar/p/4377730.html
Copyright © 2011-2022 走看看