这是我最先想到的方法
#include <stdio.h>
#include <windows.h>
#pragma warning (disable:4996)
//不使用(a+b)/2这种方式,求两个数的平均值
int avg_num(int x,int y){
int t = 0;
int avg = 0;
if (x<=y){
t = x;
x = y;
y = t;
}
avg = x - (x-y) / 2;
return avg;
}
int main(){
int a = 0;
int b = 0;
printf("Enter two number:\n");
scanf("%d%d", &a, &b);
printf("%d\n", avg_num(a, b));
system("pause");
return 0;
}
这是比较网上一些大神,他们写的代码,看不太明白
#include <stdio.h>
#include <windows.h>
#pragma warning (disable:4996)
//不使用(a+b)/2这种方式,求两个数的平均值
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_num(int x, int y){
return add(((x^y) >> 1), x&y);
}
int main(){
int a = 0;
int b = 0;
printf("Enter two number:\n");
scanf("%d%d", &a, &b);
printf("%d\n", avg_num(a, b));
system("pause");
return 0;
}
int main(){
int a = 10;
int b = 20;
int sum = ((a&b)) << 1 + (a^b);
int avg = (a&b) + (a^b) >> 1;
printf("%d\n",sum);
printf("%d\n", avg);
system("pause");
return 0;
}