问题描述
分别给定两个复数的复数模和辐角,然后通过给定的公式表示两个复数的标准形式。用这两个标准形式的复数做乘法,将得到的结果输出。
题目分析
题目比较简单,我们先根据输入的复数模和辐角利用公式计算出两个标准形式,将标准形式的复数相乘。
假设第一个复数的实部为complex_r1,虚部为cimplex_p1;第二个复数的实部为complex_r2,虚部为complex_p2。则相乘结果的实部为:complex_r1 x complex_r2 - complex_p1 x complex_p2
虚部为:complex_r1 x complex_p2 + complex_r2 x complex_p1。
计算出实部与虚部之后我们就开始输出了,输出的时候有几个细节需要注意:
1.如果实部或者虚部为负数,则我们输出一个’-’,将负数化位正数输出
2.如果实部或者虚部<0.01,我们就将这其变为0,因为保留两位小数结果也会是0,但是如果这个数字是负数,比如0.006,则它的输出一定是-0.00(保留两位小数结也是0.00),这显然不合理,所以我们要把绝对值小于0.01的数做一下归0处理,不影响结果
代码
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
int main()
{
long double r1,p1,r2,p2;
cin>>r1>>p1>>r2>>p2;
long double complex_r1,complex_r2,complex_p1,complex_p2;
complex_r1 = r1 * (cos(p1));
complex_p1 = r1 * (sin(p1));
complex_r2 = r2 * (cos(p2));
complex_p2 = r2 * (sin(p2));
long double res_r,res_p;
res_r = complex_r1 * complex_r2 - complex_p1 * complex_p2;
res_p = complex_r1 * complex_p2 + complex_r2 * complex_p1;
//如果这里的值太小的话,会导致我们保留后两位之后答案是0.00
//但是这个数字的本质有可能仍然是负数,输出的时候有可能就会出现-0.00的现象
if(fabs(res_r) < 0.01)
res_r = 0;
if(fabs(res_p) < 0.01)
res_p = 0;
if(res_r < 0)
cout<<'-'<<setiosflags(ios::fixed)<<setprecision(2)<<-res_r;
else
{
cout<<setiosflags(ios::fixed)<<setprecision(2)<<res_r;
}
if (res_p < 0)
{
cout<<'-'<<setiosflags(ios::fixed)<<setprecision(2)<<-res_p<<'i';
}
else
cout<<'+'<<setiosflags(ios::fixed)<<setprecision(2)<<res_p<<'i';
return 0;
}
答题用时14min
Q51——finish√