天天看點

複數運算

#include<iostream>

#include<cmath>

using namespace std;

struct node  

{

int shi;

int xu;

int data;

};

int main()

    int shinum=0;

    int xunum=0;

    int n;

    cin>>n;

    node*num=new node[n];

    char*a=new char[n-1];

    for(int i=0;i<n-1;i++)

    {

        cin>>num[i].data;

        cin>>a[i];

    }

    cin>>num[n-1].data;

    for(i=0;i<n;i++)

    {   num[i].xu=0;

         num[i].shi=0;

        for(int j=0;j<4;j++)

        {

            num[i].xu+=(num[i].data%16)*pow(16,j);

            num[i].data/=16;

        }

    num[i].shi=num[i].data;

    //複數加公式:

//(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

*/

for(i=0;i<n;i=i+2)

    if(shinum>32767)

        shinum=32767;

    else if(shinum<-32768)

        shinum=-32768;

   shinum+=num[i].shi*num[i+1].shi-num[i].xu*num[i+1].xu;

   if(xunum>32767)

        xunum=32767;

    else if(xunum<-32768)

        xunum=-32768;

    xunum+=num[i].shi*num[i+1].xu+num[i].xu*num[i+1].shi;

}

if(shinum>32767)

    shinum=shinum/n;

    cout<<shinum<<endl;

    if(xunum>32767)

    xunum=xunum/n;

    cout<<xunum<<endl;

cout<<shinum*pow(16,4)+xunum<<endl;

delete[] num;

delete[] a;

return 0;