建立一个复数类Complex,实数和虚数是其私有数据成员;
建立复数类的无参和参数化构造函数;
建立一个 *(乘号)的运算符重载,以便于对两个复数直接进行乘法运算;
建立输出函数void display(),对复数进行输出;
主函数里定义三个复数类对象c1、c2、c3.
输入格式:
输入一共一行,每行两个复数,分别为复数类c1和c2。
输出格式:
执行c3=c1*c2运算之后,调用display函数,对c3进行输出。
提示:输入或输出的复数,可能只包含实部或虚部。
输入样例:
1+2i 2+3i
输出样例:
-4+7i

这一题上机的时候没想好怎么做,忘记了正负,然后又想到复数的简化形式,判断起来很难,没想清楚就下了手,导致花了一个多小时没做出来,然后今天补救,有了之前的经验,仔细想了想,其实可以前来一次前缀处理,去掉特殊情形,再做成函数,这样就快很多

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
class Complex
{
private:
int imag;
int real;
public:
Complex(int r = 0, int i = 0):real(r),imag(i) {}
void display();
Complex operator *(Complex &t);
}; Complex Complex::operator *(Complex &t)
{
return Complex((real*t.real - imag*t.imag),(real*t.imag + imag*t.real));
} void Complex::display()
{
if (imag && real)
{
printf("%d",real);
if(imag == 1) printf("+i\n");
else if (imag == -1) printf("-i\n");
else if (imag > 0) printf("+%di\n",imag);
else printf("%di\n",imag);
}
else if(real != 0)
{
printf("%d\n",real);
}
else if(imag != 0)
{
if(imag == 1) printf("i\n");
else if (imag == -1) printf("-i\n");
else printf("%di\n",imag);
}
} int ll;
int change(char *s,int l)
{
int ans = 0;
while (s[l]>='0' && s[l] <= '9')
{
ans = ans*10 + s[l++] - '0';
}
ll = l;
return ans;
} Complex f(char *s)
{
int n = strlen(s);
int real = 0,imag = 0;
if(s[n-1] == 'i')//存在虚部
{
int flag = -1;
int n = strlen(s);
int t = 0;
if(s[0] == '-') t = 1;
for (int i = t; i < n; i++)
{
if(s[i] == '+' || s[i] == '-')
{
flag = i;//存在实部;
break;
}
}
if(flag != -1)//有实部有虚部
{
if(s[0] == '-') real = -1 * change(s,1);
else real = change(s,0); if(s[flag] == '-') imag = -1*change(s,flag+1);
else imag = change(s,flag+1);
}
else//只有虚部
{
if(s[0] == '-') imag = -1 * change(s,1);
else imag = change(s,0);
}
}
else//只有实部;
{
if(s[0] == '-') real = -1*change(s,1);
else real = change(s,0);
}
return Complex(real,imag);
}
int main()
{
char s1[100] = "";
char s2[100] = "";
scanf("%s %s",s1,s2);
int n = strlen(s1);
if(s1[n-1] == 'i' &&(n == 1 || s1[n-2] == '+'|| s1[n-2] == '-'))//处理特殊情形
{
s1[n-1] = '1';
s1[n] = 'i';
}
Complex c1 = f(s1); n = strlen(s2);
if(s2[n-1] == 'i' &&(n == 1 || s2[n-2] == '+'|| s2[n-2] == '-'))
{
s2[n-1] = '1';
s2[n] = 'i';
}
Complex c2 = f(s2); Complex c3 = c1*c2; c3.display();
}

C++第二次上机5-5的更多相关文章

  1. SDN 第二次上机作业

    SDN第二次上机作业 1.控制器floodlight所示可视化图形拓扑的截图,及主机拓扑连通性检测截图 拓扑 连通性 2.利用字符界面下发流表,使得'h1'和'h2' ping 不通 流表截图 连通性 ...

  2. 2019 SDN第二次上机作业

    2019 SDN第二次上机作业 1. 利用mininet创建如下拓扑,要求拓扑支持OpenFlow 1.3协议,主机名.交换机名以及端口对应正确,请给出拓扑Mininet执行结果,展示端口连接情况 创 ...

  3. Java第二次上机随笔

    主要是一些原来不懂但是本次上机涉及到的内容... 一.空数组与数组为null的区别 1.空数组: int[] array = new int[0]; array.length == 0; 空数组是一个 ...

  4. 题解:2018级算法第二次上机 Zexal的排座位

    题目描述: 样例: 实现解释: 一道看似复杂但实际既是斐波那契变形的题目 知识点:递推,斐波那契 通过问题的描述,可以得到以下规律:(除了座位数为一时)男生坐最后时,倒数第二个一定是女生:女生坐最后, ...

  5. SDN第二次上机作业

    作业链接 安装floodlight 生成拓扑并连接控制器floodlight,利用控制器floodlight查看图形拓扑 from mininet.topo import Topo class MyT ...

  6. 第二次上机,ASP内置对象的使用

    3.新建Reg.asp文档,参照1中的Reg.html,通过VBScript服务器端脚本代码实现 ”班级” Select表单的自动生成,如下所示: 注:通过循环语句,采用Response.Write命 ...

  7. 17秋 SDN课程 第二次上机作业

    1.控制器floodlight所示可视化图形拓扑的截图,及主机拓扑连通性检测截图 拓扑 连通性 2.利用字符界面下发流表,使得'h1'和'h2' ping 不通 流表截图 连通性 3.利用字符界面下发 ...

  8. PAT第二次上机题目

    5-1 #include <iostream> #include <cstdlib> using namespace std; template <class T> ...

  9. 2016级算法第二次上机-G.ModricWang's Real QuickSort

    873 思路 这是一道非常基础的题,目的是帮助大家回顾快排相关的知识.大家完成此题之后应该就对快排有比较深刻的印象了. 对于整个快排的流程,题目描述中已经给了清晰完整的伪代码.需要自己加工的部分就是, ...

随机推荐

  1. PHP mysql基本语句指令

    /*选择数据库 use test; */ /* 显示所有的数据库 show databases; */ /*删除表/数据库 drop database test1; delete from user1 ...

  2. fullpage.js全屏滚动插件使用方法

    在移动端经常会用到全屏滚动插件,实现常见H5活动页的效果,fullpage是一个很不错的jquery全屏滚动插件 fullpage.js插件的API:http://www.dowebok.com/77 ...

  3. powerdesinger导出数据库说明文档

    设置表结构要展示的属性,以及各个属性的展示列宽 不显示标题 右键单击items,选择format,然后Available栏中选择ListText选项卡,设置表格边框 保存为模板,Report-> ...

  4. 使用 paramsPrepareParamsStack 拦截器栈后的运行流程

    2. 使用 paramsPrepareParamsStack 拦截器栈后的运行流程 1). paramsPrepareParamsStack 和 defaultStack 一样都是拦截器栈. 而 st ...

  5. SaltStack远程执行-返回MySQL

    上一篇:SaltStack远程执行-模块 参考官方文档:https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.my ...

  6. ambari安装集群下python连接hbase之安装thrift

    简介: python连接hbase是需要通过thrift连进行连接的,ambari安装的服务中貌似没有自带安装hbase的thrift,我是看配置hbase的配置名称里面没有thrift,cdh版本的 ...

  7. git 学习(2)--恢复版本

    查看修改历史记录 $ git log commit fba77877d316436c1b774b8933380ebcac668040 Author: keith <ustbfxx@163.com ...

  8. HTTP Transaction Delays

    w客户端.服务器超载 HTTP The Definitive Guide 与建立TCP连接以及传输请求和相应报文的时间相比,事务处理的时间是很短的.除非客户端或服务器超载或正在处理复杂的动态资源,否则 ...

  9. php和jsCOOKIE实现前端交互

    w如何精简? <script> document.cookie = 'wjs_cookie=' + 'amz_reviews'; function w(id) { document.coo ...

  10. ajax数据提交数据的三种方式和jquery的事件委托

    ajax数据提交数据的三种方式 1.只是字符串或数字 $.ajax({ url: 'http//www.baidu.com', type: 'GET/POST', data: {'k1':'v1'}, ...