一维数组最大数溢出判断

结对人员:张世通 梁世豪

一、题目

  题目:求一维数组最大子数组的和

  要求:能计算1000以上的数组

二、设计思路

  我们最初的实现思路是通过字符串数组实现大数的计算,但是没有实现,原因是在用字符串数组进行加法运算时,进位处理还有字符串和整数的转换做不好,所以我们最后决定不再对大数溢出进行处理,而是直接给出大数溢出的异常提醒,并给出上一个正确的运算结果。虽然没有实现用字符串解决大数溢出的问题,但还是列出部分代码,说明我们的思路

 1 void Reset (char n[],int a[])
 2 {
 3     char s[Len];
 4     int i,l;
 5     for(i=0; i<Len; i++) n[i]=0;
 6     itoa(a[i], str, 10);            //整数和字符串的转换
 7     l= strlen(s);
 8     for(i=0; i<l; i++) //将输入的大数逆置
 9         n[i]=s[l-i-1]-‘0‘;
10 }

这是我们将数组转换成字符串的函数,经过测试,转换是成功的,下面是我们定义的加法

void Add (char a[],char b[],char c[])//字符串数组加法
{
    int i=0;
    for(i=0; i<Len; i++)
        c[i]=a[i]+b[i];
    for(i=0; i<Len; i++)            //处理进位
    {
        if(c[i]>=10)
        {
            c[i+1]+=c[i]/10;
            c[i]=c[i]%10;
        }
    }
}

我们先将字符串进行了顺序的颠倒,以便进行字符的加法进位,最后结果倒序输出就会得到想要的结果,但是最后结果出现了错误,经过讨论,我们决定不在使用这种方法,直接对溢出进行判断,而不再进行处理

三、实验代码

 1 // ketang4.cpp : 定义控制台应用程序的入口点。
 2 //
 3
 4 #include "stdafx.h"
 5 #include "iostream"
 6 using namespace std;
 7
 8
 9 /*确定求和存储数组元素*/
10 void Son(int father[],int length)
11 {
12     int MMAX=2147483580;
13     int max=father[0];
14     int add=0;                                                    //定义求和变量
15     int j;
16      for(int i=0;i<length;i++)
17      {
18         add=0;
19         for(j=i;j<length;j++)
20         {
21             add=add+father[j];
22             if(add>max)
23             {
24                 max=add;
25             }
26         }
27         if(MMAX-max<father[j+1])
28         {
29             cout<<"结果超出最大表示范围,将输出上一个最大值:"<<endl;
30             break;
31         }
32      }
33         cout<<"最大子数组的和为:"<<max<<endl;
34 }
35
36 /*主函数*/
37 int main()
38 {
39     int length,num;                                                //定义原始数组长度length,求和存储数组长度num
40     cout<<"请输入数组元素个数:";
41     cin>>length;
42     int* father=new int[length];                                //定义原始数组
43     for(int i=0;i<length;i++)
44     {
45         father[i]=(rand()%1000)*1000000;
46     //    cout<<father[i]<<"    ";
47     }
48     cout<<endl;
49
50
51     Son(father,length);
52     delete []father;
53     return 0;
54 }

四、实验结果

五、分析总结

  这次结对开发中,我们没有实现我们想要的结果,这是一个遗憾,不过我们都很努力的去实现它,不管是讨论,还是检查,查资料,到最后否定,我们都付出了极大的热情,这让我知道,即使与别人合作,也会有失败的时候,重要的是我们怎么对待这件事。我们虽然没有实现这个问题的解决方法,但是我们有思路,想办法去解决了,如果是我自己在解决这个问题的话,应该很快就放弃了吧。

  结对开发,需要两个人的全力付出,这样才能够起到互相激励的作用,如果有一个人懈怠了,必然会影响到另外一个人,这是不负责任的表现,虽然两个人的分工不同,但是两个人的出发点是相同的,都是为了把题目做好,都是为了更好的配合对方,提高自己。我跟梁世豪这次没有把思路实现出来,但是我们还是会认真的去思考这个问题,去想想我们做的不足的地方,找出来并加以改正。

  成功有成功的经验,失败有失败的教训,我们总会一步步成长

六、工作图

时间: 2024-08-01 17:14:25

一维数组最大数溢出判断的相关文章

一维数组最大数溢出

一.题目及要求: 题目:返回一个整数数组中最大子数组的和. 要求(新加):①要求程序必须能处理1000个元素:②每个元素都是int32类型的. 组员:石鹤 李海超 二   实验思想 定义一个无符号的长整形数组,求子数组最大和,如果大于LONGMAX+1,则溢出 三  实验代码 #include<iostream.h> long MAX(unsigned long arry[],int length) { unsigned long sum=arry[0]; unsigned long maxs

软件工程——一维数组(溢出问题)

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 初看到数值超出表示范围溢出的时候,首先想到的是汇编中的高位.地位, 于是便想到将数值分成高位和低四位,分别用“%”和“/”求出高地位再进行 计算和输出. 三.源代码 //作者:赵建松.张文冬

结对开发——一维数组最大子数组判断溢出

一 题目 求一维数组最大子数组和 要求:1000个数以上,整数 二.设计思路 最大子数组很好找到,但是子数组和的溢出问题很难解决. 经过不断的思考,我得出了结论: 溢出是程程序设计者设计时的不足所带来的错误.所以设计者要在编码时便高度警惕,预防溢出的发生,这才是最本质的解决问题的方法.就本题而言,我们设置了元素最大个数,以及其它输入要求,尽量避免溢出的发生.1000个数相加可以实现,但非要取1000个最大的数相加,那样的计算没有意义,不会在我们的生活学习中出现,这属于科研问题,交给大神们来解决吧

结对开发_求一维数组最大子数组和判断溢出

题目 求一维数组最大子数组和 要求:1000个数以上,整数 二.设计思路 最大子数组很好找到,但是子数组和的溢出问题很难解决. 经过不断的思考,我得出了结论: 溢出是程程序设计者设计时的不足所带来的错误.所以设计者要在编码时便高度警惕,预防溢出的发生,这才是最本质的解决问题的方法.就本题而言,我们设置了元素最大个数,以及其它输入要求,尽量避免溢出的发生.1000个数相加可以实现,但非要取1000个最大的数相加,那样的计算没有意义,不会在我们的生活学习中出现,这属于科研问题,交给大神们来解决吧.

求一维数组最大子数组和判断溢出

一题目 一.实验要求 求一维数组最大子数组和 要求:1000个数以上,32位整数 二.设计思路 因为我们的程序一开始就可以运算1000个以上数的运算,最大个数为364,526,269,原因为找出. 这次实验主要目的是解决最大值溢出的问题,本来想输出这个溢出的数值,但没有实现,于是改为若溢出,则输出提示,并返回溢出的上一个最大值. 三.代码 1 // ketang4.cpp : 定义控制台应用程序的入口点. 2 //张世通 梁世豪 3 4 #include "stdafx.h" 5 #i

一维数组求最大子数组(解决溢出问题)

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 程序在宏里面定义出了数组长度的大小,在长度超过100万的时候程序直接崩溃,其实这并不是因为结果太大导致的数值溢出,而是因为内存溢出,我们的数组是定义在程序内部的,属于局部变量,存放位置在栈上

PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?

如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组'; } else { echo '不是一维数组'; } PHP手册: int count ( mixed $var [, int $mode ] )  --  计算数组中的单元数目或对象中的属性个数  如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组

判断一个数组是不是一维数组

int count ( mixed $var [, int $mode ] )  --  计算数组中的单元数目或对象中的属性个数  如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组计数.对计算多维数组的所有单元尤其有用.mode 的默认值是 0.count() 识别不了无限递归. <?php if (count($array) == count($array, 1)) {     echo '是一维数组'; } else {     ech

0108练习一维数组

1.编写java程序,创建一维数组 arr[],并将其遍历输出. int arr[]={55,87,48,10,7}; for(int i=0;i<5;i++){ System.out.println(arr[i]); } 2.编写java程序,创建一维数组 arr[],将数组中最大的数输出. int arr[]={456,882,15560,88596,55,224};int max=arr[0];//建立并初始化数组arr,声明变量max=数组中第0个数 for (int m=0;m<ar