不使用(a+b)/2这种方式, 求两个数的平均值
方法一:
这种方法的优点在于, 当num1和num2的值非常大时, 相减能够保证结果不会溢出
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int num1 = 0;
int num2 = 0;
printf("Input two number:\n");
scanf("%d %d", &num1, &num2);
int avg = num1 - (num1 - num2) / 2;
printf("the average is: %d\n", avg);
return 0;
}
运行结果:
方法二:
编写函数, 利用位运算解决问题
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int add(int x, int y) //用来实现加法的函数
{
int tmp = 0;
do
{
tmp = x ^ y;
y = x & y;
x = tmp;
y <<= 1; //进位
} while (y != 0);
return x;
}
int avg(int x, int y) //用来求平均值的函数
{
return add(((x ^ y) >> 1), x & y);
}
int main()
{
int a = 0;
int b = 0;
printf("Input two number:\n");
scanf("%d %d", &a, &b);
printf("the average is: %d\n", avg(a, b));
return 0;
}