1051 复数乘法 (15 分)
输出格式:
在一行中按照 A+Bi 的格式输出两数乘积的常规形式,实部和虚部均保留 2 位小数。注意:如果 B 是负数,则应该写成 A-|B|i 的形式。
输入样例:
2.3 3.5 5.2 0.4
输出样例:
-8.68-8.23i
R1*(cos(P1)+i*sin(P1))*R2*(cos(P2)+i*sin(P2))
=R1*R2*(cos(P1)*cos(P2)+i*cos(P1)*sin(P2)+i*sin(P1)*cos(P2)+i*i*sin(P1)*sin(P2))
=R1*R2*(cos(P1)*cos(P2)+i*i*sin(P1)*sin(P2)+(cos(P1)*sin(P2)+sin(P1)*cos(P2))*i)//因为i*i=-1
=R1*R2*(cos(P1)*cos(P2)-sin(P1)*sin(P2)+(cos(P1)*sin(P2)+sin(P1)*cos(P2))*i)
=R1*R2*(cos(P1+P2)+sin(P1+P2)*i)
=R1*R2*cos(P1+P2)+R1*R2*sin(P1+P2)*i
所以
A+B*i = R1*R2*cos(P1+P2)+R1*R2*sin(P1+P2)*i
以至于
## A=R1*R2*cos(P1+P2)
## B=R1*R2*sin(P1+P2)*i
cos与sin头文件:#include < cmath> 。
注意点:
如果 B 是负数,则应该写成 A-|B|i 的形式
可以将输出格式改成
printf("%0.2f-%0.2fi",a,fabs(b));
因为实部和虚部保留2位小数,所以A、B绝对值是<0.01的数,必须要把它们设置为零,否则测试点3,4无法通过。
if(A<0.01&&A>-0.01){
A=0;
}
if(B<0.01&&B>-0.01){
B=0;
}
代码:
#include<iostream>
#include<stdio.h>
#include<cmath>
using namespace std;
int main(){
double epsilon=0.01;
double R1,P1,R2,P2;
cin>>R1>>P1>>R2>>P2;
double A=R1*R2*cos(P1+P2);
double B=R1*R2*sin(P1+P2);
if(A<epsilon&&A>-epsilon){
A=0;
}
if(B<epsilon&&B>-epsilon){
B=0;
}
if(B<0){
printf("%.2lf-%.2lfi",A,fabs(B));
}else {
printf("%.2lf+%.2lfi",A,B);
}
//printf("%.2f",2.3*5.2*cos(3.5+0.4));
//printf("%.2f",2.3*5.2*sin(3.5+0.4));
//cout<<2.3*5.2*cos(3.5+0.4)<<endl;
//cout<<2.3*5.2*sin(3.5+0.4)<<endl;
return 0;
}