华为编程 复数求均值

发布时间:2017-1-19 4:13:46 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"华为编程 复数求均值",主要涉及到华为编程 复数求均值方面的内容,对于华为编程 复数求均值感兴趣的同学可以参考一下。

题目描述 由实部和虚部组成,形如(a,bi)这样的数,称为复数。通信系统中,通常用32bit数来表示复数(高16bit表示实部,低16bit表示虚部),如整数524295(16进制为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有符号数,计算过程中,当结果大于32767(0x7fff)时,输出32767;当计算结果小于-32768(0x8000)时,输出-32768。 输入 输入共计两行 有别于实数运算,复数加减乘除运算定义如下第一行包含1个整数,表示输入复数个数N(N为偶数,N不大于1000) 第一行包含1个整数,表示输入复数个数N(N为偶数,N不大于1000) 输出 经计算得到的复数的平均值。 样例输入 4 262149,393223,524297,655371 样例输出 -458693 我的代码:下面代码还有问题,留着改 #include<iostream> using namespace std; int high(int a){ return a>>16; } int low(int a){ return a&0x0000ffff; } int get(int a){ if(a>32767) a=32767; if(a<-32768) a=-32768; return a; } int add(int ll,int rr){ int a=high(ll); int b=low(ll); int c=high(rr); int d=low(rr); return (get(a+b)<<16)+get(b+d); } int mul(int ll,int rr){ int a=high(ll); int b=low(ll); int c=high(rr); int d=low(rr); return (get(a*c-b*d)<<16)+get(a*d+b*c); } int div2(int ll,int n){ int a=high(ll); int b=low(ll); a/=n; b/=n; return (get(a)<<16)+b; } int main(){ int arr[]={262149,393223,524297,655371}; int res=0; for(int i=0;i<4;i+=2){ res=add(res,mul(arr[i],arr[i+1])); } res=div2(res,4); cout<<res<<endl; return 0; }

上一篇:跨程序之间的广播传值
下一篇:Linux体系结构(一): Linux的前世今生

相关文章

相关评论