复数的运算

  1 #include<iostream>
  2 #include<stdio.h>
  3 #include <algorithm>
  4 #include<string.h>
  5 using namespace std;
  6 class complex
  7 {
  8 private:
  9     int i,a,b,c,d,j,m,mark[2],w,flog;
 10     float e,f;
 11     char x[10],y[10],ax;
 12 public:
 13     void cint()
 14     {
 15        cout<<"输入第一个数"<<endl;
 16        scanf("%s",x);
 17        cout<<"输入运算符"<<endl;
 18        cin>>ax;
 19        cout<<"输入第二个数"<<endl;
 20        scanf("%s",y);
 21     }
 22     int nxh(int x)
 23     {
 24         int p,sum;
 25         for(p=0,sum=1;p<x;p++)
 26             sum=sum*10;
 27         return sum;
 28     }
 29     void cpucin()
 30     {
 31         int n,l,ql;
 32         for(l=1,ql=1,j=0,m=0,flog=0,n=0;j<strlen(x);j++)
 33         {
 34             if(x[0]=='-') ql=-1;
 35             if(x[j]=='+') m=j;
 36             if(x[j]=='i') n=j;
 37             if(x[j]=='-'&&j!=0)
 38             {
 39                 m=j;
 40                 l=-1;
 41             }
 42 
 43 
 44         }
 45         if(m==0)
 46         {
 47             if(n==0)
 48             {
 49                 m=strlen(x);
 50                 flog=1;
 51             }
 52             else flog=2;
 53         }
 54         if(flog==0||flog==1)
 55         {
 56             if(ql==1) j=0;
 57             else j=1;
 58             for(a=0;j<m;j++)
 59             {
 60                 a+=(x[j]-'0')*nxh(m-j-1);
 61             }
 62             a=a*ql;
 63         }
 64         if(flog==0||flog==2)
 65         {
 66             if(flog==0) j=m+1;
 67             if(flog==2&&ql==1) j=m;
 68             else j=m+1;
 69             for(b=0;j<strlen(x)-1;j++)
 70                 b+=(x[j]-'0')*nxh(strlen(x)-2-j);
 71             if(a==0) b=b*ql;
 72             else b=b*l;
 73         }
 74         else b=0;
 75        for(l=1,ql=1,j=0,m=0,flog=0,n=0;j<strlen(y);j++)
 76         {
 77             if(y[0]=='-') ql=-1;
 78             if(y[j]=='+') m=j;
 79             if(y[j]=='i') n=j;
 80             if(y[j]=='-'&&j!=0)
 81             {
 82                 m=j;
 83                 l=-1;
 84             }
 85 
 86 
 87         }
 88         if(m==0)
 89         {
 90             if(n==0)
 91             {
 92                 m=strlen(y);
 93                 flog=1;
 94             }
 95             else flog=2;
 96         }
 97         if(flog==0||flog==1)
 98         {
 99             if(ql==1) j=0;
100             else j=1;
101             for(c=0;j<m;j++)
102             {
103                 c+=(y[j]-'0')*nxh(m-j-1);
104             }
105             c=c*ql;
106         }
107         if(flog==0||flog==2)
108         {
109             if(flog==0) j=m+1;
110             if(flog==2&&ql==1) j=m;
111             else j=m+1;
112             for(d=0;j<strlen(y)-1;j++)
113                 d+=(y[j]-'0')*nxh(strlen(y)-2-j);
114             if(c==0) d=d*ql;
115             else d=d*l;
116 
117 
118         }
119         else d=0;
120     }
121     void scpu()
122     {
123         if(ax=='+') jiafa();
124         if(ax=='-') jianfa();
125         if(ax=='*') chengfa();
126         if(ax=='/') chufa();
127     }
128     void jiafa()
129     {
130         e=a+c;
131         f=b+d;
132     }
133     void jianfa()
134     {
135         e=a-c;
136         f=b-d;
137     }
138     void chengfa()
139     {
140         e=a*c-b*d;
141         f=a*d+c*b;
142     }
143     void chufa()
144     {
145         e=(a*c+b*d)/(c*c-d*d);
146         f=(b*c-a*d)/(c*c-d*d);
147     }
148     void cput()
149     {
150         if(f>0&&e!=0)
151         cout<<e<<'+'<<f<<'i'<<endl;
152         if(f==0&&e==0)
153         cout<<0<<endl;
154         if(e==0&&f!=0)
155         cout<<f<<'i'<<endl;
156         if(e!=0&&f==0)
157             cout<<e<<endl;
158         if(e!=0&&f<0)
159             cout<<e<<f<<'i'<<endl;
160 
161 
162     }
163 
164 
165 
166 } x1;
167 int main()
168 {
169     x1.cint();
170     x1.cpucin();
171     x1.scpu();
172     x1.cput();
173     system("pause");
174     return 0;
175 }
原文地址:https://www.cnblogs.com/Tree-dream/p/5333997.html