zoukankan      html  css  js  c++  java
  • 两个整数求平均值,防止溢出的问题

    两个整数求平均值,防止溢出的问题

    http://bylijinnan.iteye.com/blog/1463337

    bigInteger 没有上限,取决于计算机的内存;

    https://www.jianshu.com/p/8b89ab19db84

    其实也可以这样:

    package com.stono;
    
    public class Test02 {
    
        public static void main(String[] args) {
            int i1 = Integer.MAX_VALUE-2; // 214748 3645
            int i2 = Integer.MAX_VALUE-3; // 214748 3644
            System.out.println((i1+i2)/2); // 直接相加就溢出了
            int sa = sumAverage(i1,i2);
            System.out.println(sa);
            System.out.println(1/2); // 这个等于0的;
            System.out.println(sumAverage(7, 7));
            System.out.println(7/2);
        }
    
        private static int sumAverage(int i1, int i2) {
            int i1sa = i1/2;
            int i2sa = i2/2;
            int sasa = (i1%2+i2%2)/2; // 防止两个奇数的末位被抹掉了;
            return i1sa+i2sa+sasa;
        }
    
    }

     用位操作提升一下速度:

        private static int sumAverage(int i1, int i2) {
            int i1sa = i1>>1;
            int i2sa = i2>>1;
            int sasa = (i1&1+i2&1)>>1; // 防止两个奇数的末位被抹掉了;
            return i1sa+i2sa+sasa;
        }
  • 相关阅读:
    ruby **option作为函数参数,map的key必须是符号
    计算2..n的素数
    css,世界上没有绝对简单的事情
    modernizr的介绍和使用
    图解HTTP
    px、em、rem区别介绍
    web开发规范文档
    iscroll API
    sulime text 常用快捷键总结
    a href="javascript:void(0)"
  • 原文地址:https://www.cnblogs.com/stono/p/8507156.html
Copyright © 2011-2022 走看看