Average of 3 long integers

前端 未结 12 1751
我寻月下人不归
我寻月下人不归 2020-12-07 10:05

I have 3 very large signed integers.

long x = long.MaxValue;
long y = long.MaxValue - 1;
long z = long.MaxValue - 2;

I want to calculate th

12条回答
  •  没有蜡笔的小新
    2020-12-07 11:00

    Math

    (x + y + z) / 3 = x/3 + y/3 + z/3
    
    (a[1] + a[2] + .. + a[k]) / k = a[1]/k + a[2]/k + .. + a[k]/k
    

    Code

    long calculateAverage (long a [])
    {
        double average = 0;
    
        foreach (long x in a)
            average += (Convert.ToDouble(x)/Convert.ToDouble(a.Length));
    
        return Convert.ToInt64(Math.Round(average));
    }
    
    long calculateAverage_Safe (long a [])
    {
        double average = 0;
        double b = 0;
    
        foreach (long x in a)
        {
            b = (Convert.ToDouble(x)/Convert.ToDouble(a.Length));
    
            if (b >= (Convert.ToDouble(long.MaxValue)-average))
                throw new OverflowException ();
    
            average += b;
        }
    
        return Convert.ToInt64(Math.Round(average));
    }
    

提交回复
热议问题