zoukankan      html  css  js  c++  java
  • 结对开发——数组求和大数溢出问题

    一、题目要求

       返回一个整数数组中最大子数组的和。
     要求程序必须能处理1000 个元素;
       每个元素是int32 类型的;
       输入一个整形数组,数组里有正数也有负数。
     数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
     求所有子数组的和的最大值。

    二、程序代码

    package com.java.lianxi;
    import java.util.Scanner;
    public class lianxi4 {
        public static void main(String[] args)
        {
            int num,i;
            long sum=0;
            long max;
            Scanner cin=new Scanner(System.in);
            System.out.print("请输入数组的长度:");
            num=cin.nextInt();
            long array[]=new long[num];
            array[0]=(long)Math.pow(2,63);
            array[1]=(long)Math.pow(2,63);
            max=array[0];
            for(i=2;i<num;i++)
            {
                if((int)(Math.random()*2)==0)
                {
                    array[i]=(long)(Math.random()*100000000);
                }
                else
                {
                    array[i]=-(long)(Math.random()*100000000);
                }
            }
            for(i=0;i<num;i++)
            {
                 if(sum<=0)
                 {
                     sum=array[i];  
                 }
                 else
                 {
                     sum=sum+array[i];
                 }
                 if(sum>max)
                 {
                     max=sum;
                 }
            }
            if(max==(long)Math.pow(2,63))
            {
                System.out.println("大数溢出");
                System.out.print("子数组和的最大值为:"+max);
            }
            else
            {
                System.out.print("子数组和的最大值为:"+max);
            }
        }
    
    }

    三、结果截图

    四、心得体会

    通过测试,发现当溢出时,最大子数组的和恒为2的63次,也就是long型所能表示的最大整数,出现大数溢出,所得的不是我们想要的结果。

    我们想了很久也没有想出来有什么解决办法,因为数据类型所能表示的数就那么大,但是如果想得到正确的结果,我们可以不输出一个最终结果,可以输出几个数相加,但是考虑到相加的几个数都要控制在2的63次方之内,很难实现。还想了一个就是可以把最后结果当成两个变量来显示,高位放在其中一个变量,低位放在另一个变量,也不知道怎么实现。

  • 相关阅读:
    linux 磁盘挂载及查看磁盘
    【转】Linux 如何通过命令仅获取IP地址
    【转】CentOS 7 安装配置 NFS
    【转】利用virtualenv管理Python环境
    ssh 常用命令
    JavaScript 视频教程 收藏
    MySQL Json类型的数据处理
    Nhibernate + MySQL 类型映射
    ABP框架服务层的接口与实现(增删改查)
    ABP框架源码中的Linq扩展方法
  • 原文地址:https://www.cnblogs.com/luyu2783/p/4376632.html
Copyright © 2011-2022 走看看