题目:复数平均值
由实部和虚部组成,形如(a,bi)这样的数,称为复数。通信系统中,通常用32bit数来表示复数(高16bit表示实部,低16bit表示虚部),如整数52429516进制为0x00080007)所代表的复数,实部为0x0008,虚部为0x0007
 有别于实数运算,复数加、减、乘、除运算定义如下:
 复数加公式:(a,bi) + (c,di) = (a + c),(b + d)i
 复数减公式:(a,bi) - (c,di) = (a - c),(b - d)i
 复数乘公式:(a,bi) * (c,di) = (ac - bd),(ad + bc)i
 复数除公式:(a,bi) / N = (a/N),(b/N)i
 题目要求,输入N个复数,计算这个N个复数的平均值,复数Avg = (复数1*复数2 + 复数3*复数4 +  + 复数N-1*复数N) / N
 复数加、复数减、复数乘、复数除的结果仍然为复数,实部和虚部均为16bit有符号数,计算过程中,当结果大于327670x7fff)时,输出32767;当计算结果小于-327680x8000)时,输出-32768
输入

输入共计两行
 第一行包含1个整数,表示输入复数个数NN为偶数,N不大于1000
 第二行包含N个整数,分别表示输入复数
输出

经计算得到的复数的平均值。
样例输入

4 262149,393223,524297,655371
样例输出

-458693
  
代码:
#include"stdio.h"
int main()
{
	int n;
	int i,num,Avg;
    int rsum=0,xsum=0;
	int a[1001],b[1001];
	scanf("%d",&n);
	if((n%2==1)||(n>1000)||(n<1))
	{
		return 0;
	}
	for(i=0;i<n;i++)
	{
		if(i!=n-1)
		{
			scanf("%d,",&num);
		}
		else
		{
			scanf("%d",&num);
		}
		a[i]=(num>>16);
		b[i]=num&0xffff;
		if(i%2==1)
		{
			rsum+=(a[i-1]*a[i]-b[i-1]*b[i]);
		    xsum+=(a[i-1]*b[i]+b[i-1]*a[i]);
		}
	}
	if(rsum>32767) rsum=32767;
	if(rsum<-32768) rsum=-32768;
	if(xsum>32767) xsum=32767;
	if(xsum<-32768) xsum=-32768;
	rsum=rsum/n;
	xsum=xsum/n;
	Avg=(rsum<<16)+xsum;
	printf("%d\n",Avg);
	return 0;
}