给定两个数字,a和b。计算两个数字的平均值。
在以下情况下,众所周知的公式(a + b)/ 2可能会失败:
如果, a = b =(2 ^ 31)– 1 ;即INT_MAX。
现在,(a + b)将导致溢出,因此公式(a + b)/ 2将不起作用
下面是实现:
C++
// C++ code to compute average of two numbers
#include
using namespace std;
// Function to compute average of two numbers
int compute_average(int a, int b)
{
return (a + b) / 2;
}
// Driver code
int main()
{
// Assigning maximum integer value
int a = INT_MAX, b = INT_MAX;
// Average of two equal numbers is the same number
cout << "Actual average : " << INT_MAX << endl;
// Function to get the average of 2 numbers
cout << "Computed average : " << compute_average(a, b);
return 0;
}
Java
// Java code to compute average of two numbers
import java.io.*;
class GFG {
// Function to compute average of two numbers
static int compute_average(int a, int b)
{
return (a + b) / 2;
}
// Driver code
public static void main (String[] args) {
// Assigning maximum integer value
int a = Integer.MAX_VALUE;
int b = Integer.MAX_VALUE;
// Average of two equal numbers is the same number
System.out.println("Actual average : " + Integer.MAX_VALUE);
// Function to get the average of 2 numbers
System.out.println("Computed average : " + compute_average(a, b));
}
// This code is contributed by ajit.
}
Python3
# Python 3 code to compute
# average of two numbers
import sys
from math import floor
INT_MAX = 2147483647
# Function to compute
# average of two numbers
def compute_average(a, b):
return floor((a + b) / 2)
# Driver code
if __name__ == '__main__':
# Assigning maximum integer value
a = INT_MAX
b = -INT_MAX - 1
# Average of two equal numbers
# is the same number
print("Actual average : ", INT_MAX)
# Function to get the
# average of 2 numbers
print("Computed average : ",
compute_average(a, b))
# This code is contributed by
# Surendra_Gangwar
C#
// C# code to compute average of two numbers
using System;
public class GFG{
// Function to compute average of two numbers
static int compute_average(int a, int b)
{
return (a + b) / 2;
}
// Driver code
static public void Main (){
// Assigning maximum integer value
int a =int.MaxValue;
int b = int.MaxValue;
// Average of two equal numbers is the same number
Console.WriteLine("Actual average : " + int.MaxValue);
// Function to get the average of 2 numbers
Console.WriteLine("Computed average : " + compute_average(a, b));
}
//This code is contributed by akt_mit
}
C++
// C++ code to compute average of two numbers
#include
using namespace std;
// Function to compute average of two numbers
int compute_average(int a, int b)
{
return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
}
// Driver code
int main()
{
// Assigning maximum integer value
int a = INT_MAX, b = INT_MAX;
// Average of two equal numbers is the same number
cout << "Actual average : " << INT_MAX << endl;
// Function to get the average of 2 numbers
cout << "Computed average : " << compute_average(a, b);
return 0;
}
Java
// Java code to compute
// average of two numbers
import java.io.*;
class GFG
{
// Function to compute
// average of two numbers
static int compute_average(int a,
int b)
{
return (a / 2) + (b / 2) +
((a % 2 + b % 2) / 2);
}
// Driver code
public static void main (String[] args)
{
// Assigning maximum
// integer value
int a = Integer.MAX_VALUE;
int b = Integer.MAX_VALUE;
// Average of two equal
// numbers is the same number
System.out.println("Actual average : " +
Integer.MAX_VALUE);
// Function to get the
// average of 2 numbers
System.out.print("Computed average : ");
System.out.println(compute_average(a, b));
}
}
// This code is contributed by ajit
Python3
# Python code to compute
# average of two numbers
INT_MAX=2147483647
# Function to compute
# average of two numbers
def compute_average(a,b):
return (a // 2) + (b // 2) + ((a % 2 + b % 2) // 2)
# Driver code
if __name__ =="__main__":
# Assigning maximum integer value
a = INT_MAX
b = INT_MAX
# Average of two equal
# numbers is the same number
print( "Actual average : ",INT_MAX)
# Function to get the
# average of 2 numbers
print( "Computed average : ",
compute_average(a, b))
# This code is contributed
# Shubham Singh(SHUBHAMSINGH10)
C#
// C# code to compute
// average of two numbers
using System;
class GFG
{
// Function to compute
// average of two numbers
static int compute_average(int a,
int b)
{
return (a / 2) + (b / 2) +
((a % 2 + b % 2) / 2);
}
// Driver code
public static void Main ()
{
// Assigning maximum
// integer value
int a = int.MaxValue;
int b = int.MaxValue;
// Average of two equal
// numbers is the same number
Console.Write("Actual average : " +
int.MaxValue+"\n");
// Function to get the
// average of 2 numbers
Console.Write("Computed average : ");
Console.Write(compute_average(a, b));
}
}
PHP
Javascript
输出:
Actual average : 2147483647
Computed average : -1
改进的公式,不会引起溢出:
平均值=(a / 2)+(b / 2)+((((a%2)+(b%2))/ 2)
下面是实现:
C++
// C++ code to compute average of two numbers
#include
using namespace std;
// Function to compute average of two numbers
int compute_average(int a, int b)
{
return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
}
// Driver code
int main()
{
// Assigning maximum integer value
int a = INT_MAX, b = INT_MAX;
// Average of two equal numbers is the same number
cout << "Actual average : " << INT_MAX << endl;
// Function to get the average of 2 numbers
cout << "Computed average : " << compute_average(a, b);
return 0;
}
Java
// Java code to compute
// average of two numbers
import java.io.*;
class GFG
{
// Function to compute
// average of two numbers
static int compute_average(int a,
int b)
{
return (a / 2) + (b / 2) +
((a % 2 + b % 2) / 2);
}
// Driver code
public static void main (String[] args)
{
// Assigning maximum
// integer value
int a = Integer.MAX_VALUE;
int b = Integer.MAX_VALUE;
// Average of two equal
// numbers is the same number
System.out.println("Actual average : " +
Integer.MAX_VALUE);
// Function to get the
// average of 2 numbers
System.out.print("Computed average : ");
System.out.println(compute_average(a, b));
}
}
// This code is contributed by ajit
Python3
# Python code to compute
# average of two numbers
INT_MAX=2147483647
# Function to compute
# average of two numbers
def compute_average(a,b):
return (a // 2) + (b // 2) + ((a % 2 + b % 2) // 2)
# Driver code
if __name__ =="__main__":
# Assigning maximum integer value
a = INT_MAX
b = INT_MAX
# Average of two equal
# numbers is the same number
print( "Actual average : ",INT_MAX)
# Function to get the
# average of 2 numbers
print( "Computed average : ",
compute_average(a, b))
# This code is contributed
# Shubham Singh(SHUBHAMSINGH10)
C#
// C# code to compute
// average of two numbers
using System;
class GFG
{
// Function to compute
// average of two numbers
static int compute_average(int a,
int b)
{
return (a / 2) + (b / 2) +
((a % 2 + b % 2) / 2);
}
// Driver code
public static void Main ()
{
// Assigning maximum
// integer value
int a = int.MaxValue;
int b = int.MaxValue;
// Average of two equal
// numbers is the same number
Console.Write("Actual average : " +
int.MaxValue+"\n");
// Function to get the
// average of 2 numbers
Console.Write("Computed average : ");
Console.Write(compute_average(a, b));
}
}
的PHP
Java脚本
输出:
Actual average : 2147483647
Computed average : 2147483647