ADV-120-复数四则运算

设计复数库,实现基本的复数加减乘除运算。
  输入时只需分别键入实部和虚部,以空格分割,两个复数之间用运算符分隔;输出时按a+bi的格式在屏幕上打印结果。参加样例输入和样例输出。
  注意考虑特殊情况,无法计算时输出字符串"error"。
样例输入
2 4 * -3 2
样例输出
-14-8i
样例输入
3 -2 + -1 3
样例输出
2+1i


C

#include<stdio.h>
int main()
{
	double a,b,c,d;
	double bb=0.0;
	char op;
	scanf("%lf %lf %c %lf %lf",&a,&b,&op,&c,&d);
	bb=c*c+d*d;
	switch(op)
	{
	case 43:printf("%.0lf%+.0lfi\n",a+c,b+d);break;
	case 45:printf("%.0lf%+.0lfi\n",a-c,b-d);break;
	case 42:printf("%.0lf%+.0lfi\n",a*c-b*d,a*d+b*c);break;
	case 47:{
				if(bb!=0.0)
					if((a*c+b*d)/bb<0&&(a*c+b*d)/bb>-1)
					printf("%.1lf%+.1lfi\n",(a*c+b*d)/bb,(b*c-a*d)/bb);
					else printf("%.0lf%+.0lfi\n",(a*c+b*d)/bb,(b*c-a*d)/bb);
				else printf("error");
			}
		break;
	}
	return 0;
}

C++

/**************Powered by Graphene Richards**************/
//{
#define OUTPUT_PRECISION    "%.2f"
#define LF_PRECISION        10
#define INT_64_MOD          "%I64d"
#define UNSIGNED_64_MOD     "%I64u"

#define CONTEST_EXIST       1

#define CONTEST_START_HOUR  13
#define CONTEST_START_MIN   0

#define CONTEST_DUR_HOUR    4
#define CONTEST_DUR_MIN     0

//#pragma comment(linker,"/STACK:102400000,102400000")
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<bitset>
#include<complex>
#include<vector>
#include<iomanip>
#include<iostream>
#include<list>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<string>
#include<typeinfo>
#define FAST_RW ios_base::sync_with_stdio(0),cin.tie(0);
#define IT(x) __typeof((x).begin())
#define FS(i,a) for(ll i=0;a[i];i++)
#define FE(x,ctn) for(IT(ctn)x=(ctn).begin(),CluhxSchFuDeugk=(ctn).end();x!=CluhxSchFuDeugk;x++)
#define FR(i,en) for(ll i=0,pJNwFPtlXiwFoIv=(en);i<pJNwFPtlXiwFoIv;i++)
#define FOR(i,en) for(ll i=1,SbKCIcakJTeYVqs=(en);i<=SbKCIcakJTeYVqs;i++)
#define FFR(i,x,y) for(ll i=(x),alVDbhLBoMEGSwA=(y);i<=alVDbhLBoMEGSwA;i++)
#define DFFR(i,x,y) for(ll i=(x),NWYfecAcmGBMJuU=(y);i>=NWYfecAcmGBMJuU;i--)
#define ll long long
#define ull unsigned long long
#define lf long double
#define pc putchar
#define mp make_pair
#define pb push_back
#define pq priority_queue
#define fi first
#define se second
#define pii pair<int,int>
#define pdd pair<double,double>
#define lb(x) (x&(-x))
#define sqr(x) (x)*(x)
#define all(x) (x).begin(),(x).end()
#define clr(x) memset((x),0,sizeof(x))
#define ms(x,v) memset((x),(v),sizeof(x))
#define NL puts("");
using namespace std;

template<class T1,class T2,class T3>
bool _IN(T1 x,T2 y,T3 z){
  return x<=y&&x>=z||x<=z&&x>=y;
}

ull gcd(ull a,ull b){
  if(!b)return a;
  while(b^=a^=b^=a%=b);
  return a;
}

#ifdef wmx16835
#include<ctime>
#include<conio.h>
#include<windows.h>

#define GREEN  10
#define BLUE   11
#define RED    12
#define PINK   13
#define YELLOW 14
#define WHITE  15

struct TM{
  int t;
  TM(int a,int b,int c):t(a*3600+b*60+c){}
  TM(int x):t(x){}
  TM(){}
  operator int(){return t;}
  void print(){
    printf("%02d:%02d:%02d",t/3600%24,t/60%60,t%60);
  }
};

void OVZmetNNpAqAVZx(){
  time_t t=time(0);
  srand(t);
  tm*p=localtime(&t);
  TM day(24,0,0),cur(p->tm_hour,p->tm_min,p->tm_sec),beg(CONTEST_START_HOUR,CONTEST_START_MIN,0),len(CONTEST_DUR_HOUR,CONTEST_DUR_MIN,0),en(beg+len),fen(beg+en+day>>1),seg;
  if(beg>cur)cur.t+=day;
  puts("  +--------------------------+");
  if(_IN(cur,beg,en)&&CONTEST_EXIST){
    puts("  |      Status: Running     |");
    printf("  |     Progress: %5.1f %%    |\n",(double)(cur-beg)/len*100);
    seg.t=en-cur;
    printf("  | Remaining time: ");
    seg.print();
    puts(" |");
  }
  else{
    printf("  |  Current time: ");
    cur.print();
    puts("  | ");
    if(cur<=fen||!CONTEST_EXIST)
      puts("  |       Status: Ended      |");
    else{
      puts("  |     Status: Scheduled    |");
      cur.t-=day;
      seg.t=beg-cur;
      printf("  | Remaining time: ");
      seg.print();
      puts(" |");
    }
  }
  puts("  +--------------------------+");
  puts("................................\n");
}

const HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);

void _COLOR(unsigned x=BLUE){
  SetConsoleTextAttribute(hout,x);
}

void pCJUYxWEXKaDOIC(){
  int num=1;
  FILE*p=fopen("FILE_NAME","r");
  if(p){
    fscanf(p,"%d",&num);
    fclose(p);
  }
  char f_name[1024];
  sprintf(f_name,"%d.out",num++);
  _COLOR(PINK);
  printf("[NOTICE] Standard output has been redirected to \"%s\".\n",f_name);
  _COLOR();
  freopen(f_name,"w",stdout);
  if(!stdout)
    exit(1);
  else
  p=fopen("FILE_NAME","w");
  if(p){
    fprintf(p,"%d",num);
    fclose(p);
  }
}

int bXMXqqguPAUDCia;
void FrKZgXsfpPVkeNv(){
  char x[1000];
  sprintf(x,"[Paused: %d]",++bXMXqqguPAUDCia);
  int len=strlen(x);
  printf(x);
  getch();
  FR(i,len)pc('\b');
  FR(i,len)pc(' ');
  FR(i,len)pc('\b');
}

#define LOG {_COLOR(RED);unsigned ijqQjAZZNYpJYBe=clock();puts("\n----------------------");_COLOR();
#define TEL _COLOR(RED),printf("\n----------------------\nExecution time: %ums\n----------------------\n",clock()-ijqQjAZZNYpJYBe);_COLOR();}
#define SHOW_TIME {_COLOR(GREEN);OVZmetNNpAqAVZx();_COLOR();}
#define test(...) _COLOR(YELLOW),printf(__VA_ARGS__),_COLOR()
#define TEST(x) _COLOR(YELLOW),printf("%s = ",#x),_P(x),puts(""),_COLOR()
#define TRY(...) {__VA_ARGS__}
#define PF pCJUYxWEXKaDOIC();
#define PP {_COLOR(RED);FrKZgXsfpPVkeNv();_COLOR();}

#else
int ebtpqJsBCnTgggi;
#define LOG {
#define TEL }
#define SHOW_TIME
#define test(...) ebtpqJsBCnTgggi
#define TEST(...) ebtpqJsBCnTgggi
#define TRY(...)
#define PF
#define PP ;
#endif

int S(char*a){
  return scanf("%s",a)==1;
}

template<class T>
int S(T&a){
  const char*x=typeid(a).name();
  if(!strcmp(x,"i")||!strcmp(x,"b"))return scanf("%d",&a)==1;
  else if(!strcmp(x,"j"))return scanf("%u",&a)==1;
  else if(!strcmp(x,"c"))return scanf("%c",&a)==1;
  else if(!strcmp(x,"Pc")||*x=='A')return scanf("%s",a)==1;
  else if(!strcmp(x,"f"))return scanf("%f",&a)==1;
  else if(!strcmp(x,"d"))return scanf("%lf",&a)==1;
  else if(!strcmp(x,"x"))return scanf(INT_64_MOD,&a)==1;
  else if(!strcmp(x,"y"))return scanf(UNSIGNED_64_MOD,&a)==1;
  else if(!strcmp(x,"e"))return (cin>>a)!=0;
  else test("Input format error!\n");
}

template<class T>
void _P(T a){
  const char*x=typeid(a).name();
  if(!strcmp(x,"i")||!strcmp(x,"b"))printf("%d",a);
  else if(!strcmp(x,"j"))printf("%u",a);
  else if(!strcmp(x,"c"))printf("%c",a);
  else if(!strcmp(x,"Pc")||!strcmp(x,"PKc")||*x=='A')printf("%s",a);
  else if(!strcmp(x,"d")||!strcmp(x,"f"))printf(OUTPUT_PRECISION,a);
  else if(!strcmp(x,"x"))printf(INT_64_MOD,a);
  else if(!strcmp(x,"y"))printf(UNSIGNED_64_MOD,a);
  else if(!strcmp(x,"e"))cout<<setprecision(LF_PRECISION)<<a;
  else test("Output format error!\n");
}

template<class T1,class T2>
int S(T1&a,T2&b){
  return S(a)+S(b)==2;
}

template<class T1,class T2,class T3>
int S(T1&a,T2&b,T3&c){
  return S(a)+S(b)+S(c)==3;
}

template<class T1,class T2,class T3,class T4>
int S(T1&a,T2&b,T3&c,T4&d){
  return S(a)+S(b)+S(c)+S(d)==4;
}

template<class T1,class T2,class T3,class T4,class T5>
int S(T1&a,T2&b,T3&c,T4&d,T5&e){
  return S(a)+S(b)+S(c)+S(d)+S(e)==5;
}

template<class T>
void P(T a){
  _P(a);
  pc(' ');
}

template<class T1,class T2>
void P(T1 a,T2 b){
  _P(a);pc(' ');
  _P(b);pc(' ');
}

template<class T>
void PN(T a){
  _P(a);
  NL
}

template<class T1,class T2>
void PN(T1 a,T2 b){
  _P(a);pc(' ');
  _P(b);NL
}

template<class T1,class T2,class T3>
void PN(T1 a,T2 b,T3 c){
  _P(a);pc(' ');
  _P(b);pc(' ');
  _P(c);NL
}

template<class T1,class T2,class T3,class T4>
void PN(T1 a,T2 b,T3 c,T4 d){
  _P(a);pc(' ');
  _P(b);pc(' ');
  _P(c);pc(' ');
  _P(d);NL
}

template<class T1,class T2,class T3,class T4,class T5>
void PN(T1 a,T2 b,T3 c,T4 d,T5 e){
  _P(a);pc(' ');
  _P(b);pc(' ');
  _P(c);pc(' ');
  _P(d);pc(' ');
  _P(e);NL
}

template<class T>
void PA(T*a,int n){
  FR(i,n-1)P(a[i]);
  PN(a[n-1]);
}

template<class T>
void PA(const T&x){
  IT(x) ita=x.begin();
  FE(it,x){
    _P(*it);
    if(++ita==x.end())NL
    else pc(' ');
  }
}

int kase;
const double pi=4*atan(1);
const double ep=1e-9;
//}

struct cp{
  double s,x;
  bool v;
  void in(){
    S(s,x);
    v=1;
  }
  cp operator+(const cp&r){
    return {s+r.s,x+r.x,1};
  }
  cp operator-(const cp&r){
    return {s-r.s,x-r.x,1};
  }
  cp operator*(const cp&r){
    return {s*r.s-x*r.x,s*r.x+x*r.s,1};
  }
  cp operator/(const cp&r){
    if(r.s==0&&r.x==0)return {0,0,0};
    return {(s*r.s+x*r.x)/(sqr(r.s)+sqr(r.x)),(-s*r.x+x*r.s)/(sqr(r.s)+sqr(r.x)),1};
  }
  void out(){
    if(v)
    cout<<s<<(x<0?'-':'+')<<abs(x)<<'i';
    else
      puts("error");
  }
};

char bf[5];

int main(){
  SHOW_TIME
  cp a,b;
  a.in();
  S(bf);
  b.in();
  if(*bf=='+')a=a+b;
  if(*bf=='-')a=a-b;
  if(*bf=='*')a=a*b;
  if(*bf=='/')a=a/b;
  a.out();
}

/*********Risoft corporation all rights reserved*********/
/**************Template V1.40 build 20150122*************/



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值