1051 复数乘法 (15 分)
复数可以写成 (A+Bi) 的常规形式,其中 A 是实部,B 是虚部,i 是虚数单位,满足 i2=?1;也可以写成极坐标下的指数形式 (R×e(Pi)),其中 R 是复数模,P 是辐角,i 是虚数单位,其等价于三角形式 R(cos(P)+isin(P))。
现给定两个复数的 R 和 P,要求输出两数乘积的常规形式。
输入格式:
输入在一行中依次给出两个复数的 R1?, P1?, R2?, P2?,数字间以空格分隔。
输出格式:
在一行中按照 A+Bi 的格式输出两数乘积的常规形式,实部和虚部均保留 2 位小数。注意:如果 B 是负数,则应该写成 A-|B|i 的形式。
输入样例:
2.3 3.5 5.2 0.4
输出样例:
-8.68-8.23i
对于结果是0的时候,要进行特判,因为一个很小的小数四舍五入等于0的时候,它有可能是正数,也有可能是负数,当是负数的时候,我们就不能输出这个负号!!!!
对此,我写了两个代码!
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
double r1,p1,r2,p2;
cin >> r1 >> p1 >> r2 >> p2;
double r=r1*r2,p=p1+p2;
double x=r*cos(p),y=r*sin(p);
if(x+0.005>0&&x<0)
printf("0.00");
else
printf("%.2f",x);
if(y+0.005>0&&y<0)
printf("+0.00i");
else if(y<0)
printf("-%.2fi\n",fabs(y));
else
printf("+%.2fi\n",y);
return 0;
}
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
double r1,p1,r2,p2;
cin >> r1 >> p1 >> r2 >> p2;
double x1=r1*cos(p1),y1=r1*sin(p1),x2=r2*cos(p2),y2=r2*sin(p2);
double x=x1*x2-y1*y2,y=x1*y2+x2*y1;
if(x+0.005>0&&x<0)
printf("0.00");
else
printf("%.2f",x);
if(y+0.005>0&&y<0)
printf("+0.00i\n");
else if(y<0)
printf("-%.2fi\n",fabs(y));
else
printf("+%.2fi\n",y);
return 0;
}
|