PTA【复数相乘】
队友在比赛时A掉的。吊吊吊!!!
主要考虑这些情况吧|||
案例:
/*
3i i
-3 i
-1-i 1+i
i 1
-1-i -1-i
*/
-3
-3i
-2i
i
2i
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
#define MAX 1010
#define INF 0x3f3f3f
int n,m;
int sum1,sum2;
void display(int a,int b,int c,int d)
{
sum1=a*c-b*d;
sum2=a*d+b*c;
// printf("%d %d %d %d\n",a,b,c,d);
}
int main()
{
while(1)
{
int i,j,k,t;
char s1[MAX],s2[MAX];
int a,b,c,d;
a=b=c=d=0;
scanf("%s%s",s1,s2);
int n1=strlen(s1);
int n2=strlen(s2);
int f1=0,f2=0;
for(i=0;i<n1;i++)
{
if(s1[i]=='i')
f1=1;
}
if(f1)
{
int cont=0;
for(i=0;i<n1;i++)
{
if(s1[i]=='-'||s1[i]=='+')
cont++;
}
if(cont==0)
{
for(i=0;i<n1-1;i++)
b=b*10+s1[i]-'0';
if(n1==1)
b=1;
}
if(cont==2)
{
for(i=1;i<n1-1;i++)
{
if(s1[i]=='-'||s1[i]=='+')
break;
a=a*10+s1[i]-'0';
}
a=-a;
k=i;
for(++i;i<n1-1;i++)
{
b=b*10+s1[i]-'0';
}
if(n1-k==2)
b=1;
// printf("%d\n",k);
if(s1[k]=='-')
b=-b;
}
if(cont==1)
{
if(s1[0]=='-')
{
for(i=1;i<n1-1;i++)
b=b*10+s1[i]-'0';
b=-b;
if(n1==2)
b=-1;
}
else
{
for(i=0;i<n1;i++)
{
if(s1[i]=='-'||s1[i]=='+')
break;
a=a*10+s1[i]-'0';
}
k=i;
for(++i;i<n1-1;i++)
{
b=b*10+s1[i]-'0';
}
if(n1-k==2)
b=1;
if(s1[k]=='-')
b=-b;
}
}
}
else
{
if(n1==1)
a=s1[0]-'0';
else if(s1[0]=='-')
{
for(i=1;i<n1;i++)
a=a*10+s1[i]-'0';
a=-a;
}
else
{
for(i=1;i<n1;i++)
a=a*10+s1[i]-'0';
}
b=0;
}
for(i=0;i<n2;i++)
{
if(s2[i]=='i')
f2=1;
}
if(f2)
{
int cont=0;
for(i=0;i<n2;i++)
{
if(s2[i]=='-'||s2[i]=='+')
cont++;
}
if(cont==0)
{
for(i=0;i<n2-1;i++)
d=d*10+s2[i]-'0';
if(n2==1)
d=1;
}
if(cont==2)
{
for(i=1;i<n2;i++)
{
if(s2[i]=='-'||s2[i]=='+')
break;
c=c*10+s2[i]-'0';
}
c=-c;
k=i;
for(++i;i<n2-1;i++)
{
d=d*10+s2[i]-'0';
}
if(n2-k==2)
d=1;
if(s2[k]=='-')
d=-d;
}
if(cont==1)
{
if(s2[0]=='-')
{
for(i=1;i<n2-1;i++)
d=d*10+s2[i]-'0';
d=-d;
if(n2==2)
d=-1;
}
else
{
for(i=0;i<n2;i++)
{
if(s2[i]=='-'||s2[i]=='+')
break;
c=c*10+s2[i]-'0';
}
k=i;
for(++i;i<n2-1;i++)
{
d=d*10+s2[i]-'0';
}
if(n2-k==2)
d=1;
if(s2[k]=='-')
d=-d;
}
}
}
else
{
if(n2==1)
c=s2[0]-'0';
else if(s2[0]=='-')
{
for(i=1;i<n2;i++)
c=c*10+s2[i]-'0';
c=-c;
}
else
{
for(i=1;i<n2;i++)
c=c*10+s2[i]-'0';
}
d=0;
}
display(a,b,c,d);
if(sum1==0&&sum2==0)
printf("0\n");
else if(sum1==0&&sum2!=0)
{
if(sum2==1)
printf("i\n");
else if(sum2==-1)
printf("-i\n");
else
printf("%di\n",sum2);
}
else if(sum1!=0&&sum2==0)
printf("%d\n",sum1);
else if(sum1!=0&&sum2!=0)
{
if(sum2>0)
{
if(sum2!=1)
printf("%d+%di\n",sum1,sum2);
else
printf("%d+i\n",sum1);
}
else
{
if(sum2!=-1)
printf("%d%di\n",sum1,sum2);
else
printf("%d-i\n",sum1);
}
}
}
return 0;
}
PTA【复数相乘】的更多相关文章
- [LeetCode] Complex Number Multiplication 复数相乘
Given two strings representing two complex numbers. You need to return a string representing their m ...
- PTA 复数四则运算
本题要求编写程序,计算2个复数的和.差.积.商. 输入格式: 输入在一行中按照a1 b1 a2 b2的格式给出2个复数C1=a1+b1i和C2=a2+b2i的实部和虚部.题目保证C2不为0. 输出格式 ...
- C++ 实验 使用重载运算符实现一个复数类
实验目的: 1.掌握用成员函数重载运算符的方法 2.掌握用友元函数重载运算符的方法 实验要求: 1.定义一个复数类,描述一些必须的成员函数,如:构造函数,析构函数,赋值函数,返回数据成员值的函数等. ...
- BZOJ 3621: 我想那还真是令人高兴啊 计算几何 复数
https://www.lydsy.com/JudgeOnline/problem.php?id=3621 给定两个三角形,其中一个可以通过以某点为中心旋转并放缩的方式得到另一个,求这个中心 http ...
- 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Compl
因标题框有限,题目未显示完整,以下再放一份: 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Compl ...
- 多项式相乘快速算法原理及相应C代码实现---用到fft
最近认真研究了一下算法导论里面的多项式乘法的快速计算问题,主要是用到了FFT,自己也实现了一下,总结如下. 1.多项式乘法 两个多项式相乘即为多项式乘法,例如:3*x^7+4*x^5+1*x^2+5与 ...
- 闲话复数(1) | 不现实的虚数 i 为什么虚?它长成什么样?
原文 | https://mp.weixin.qq.com/s/y-Nb3S508UZuf_0GtRuNaQ 复数的英文是complex number,直译是复杂的数.最早接触复数大概是在高中时期,只 ...
- 复数基础及其2D空间的旋转
本文我们讨论复数及其旋转的含义.复数很有意思,本文介绍了复数的基本定义和性质,以及它关于旋转的几何意义. 复数对于旋转的两个方面极为重要: 1. 它引入了旋转算子(rotational operato ...
- Java练习 SDUT-4303_简单的复数运算(类和对象)
简单的复数运算(类和对象) Time Limit: 2000 ms Memory Limit: 65536 KiB Problem Description 设计一个类Complex,用于封装对复数的下 ...
随机推荐
- Linux C++的多线程编程(转)
1. 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的Unix也支持线程的概念,但是在一个进程(proces ...
- Arduino 网络时钟client
升级! 添加了12h/24h 的开关,还有标准/ 夏令时开关!见步骤7 & 步骤8. 你是否曾想要一个和办公室时间来源全然准确的表? 这就有一个网络的办公时间server,你能够根据它并同步你 ...
- fruitstrap 安装.app文件
1. 下载ipa的ios文件然后解压成.app的文件 2. 进入fruitstrap文件夹,copy .app文件到fruitstrap文件夹中 执行./fruitstrap -b umetrip.a ...
- 流媒体开发之开源项目live555---更改server端的帧率大小和码率大小
-----------------------------qq:1327706646 010101010101010110010101010101010101010author:midu 010101 ...
- 文件管理中心iOS APP (国外市场:File Center) 技术支持
文件管理中心iOS APP (国外市场:File Center) 技术支持网址:http://www.cnblogs.com/flychen/邮箱:592802944@qq.com
- 4.改变eclipse选中文字颜色
window-preferences-general-editors-text editors-annotations-occurrences 和 window-preferences-general ...
- Spring boot 使用Junt
//@RunWith:启动器,SpringJUnit4ClassRunner:Spring整合JUnit4 //@SpringBootTest获取启动类,相当于@Contextconfiguartio ...
- VK Cup 2016 - Round 1 (Div. 2 Edition) C. Bear and Forgotten Tree 3
C. Bear and Forgotten Tree 3 time limit per test 2 seconds memory limit per test 256 megabytes input ...
- HDU3374 String Problem —— 最小最大表示法 + 循环节
题目链接:https://vjudge.net/problem/HDU-3374 String Problem Time Limit: 2000/1000 MS (Java/Others) Me ...
- xcode添加背景音乐/音效
xcode添加音效:http://www.cnblogs.com/jiayongqiang/p/5625886.html 背景音乐: ios播放音乐时会用到一个叫做AVAudioPlayer的类,这个 ...