原题
解析
虽然是一个小小的15分题,但是还是值得记录一下。因为这个点以前从没遇到过,也不容易发现:
由于大于等于-0.005且小于0的double小数在最后会被四舍五入输出0.00,但同时又被判定成负数,所以最后的输出结果会变成-0.00。这显然是不符合要求的。
所以处理办法就是将这样的数全部置0,避免输出符号。
修改过后即可通过测试点2,3。
P.S. 复数的指数形式的乘法只需要模长相乘幅角相加即可,最后通过三角函数转换为一般形式。
代码
#include <iostream>
#include <cmath>
using namespace std;
int main(){
double r1,p1,r2,p2;
cin>>r1>>p1>>r2>>p2;
double r=r1*r2;
double p=p1+p2;
double A=r*cos(p);
double B=r*sin(p);
if(B>=-0.005&&B<=0) B=0.00;
if(A>=-0.005&&A<=0) A=0.00;
cout<<fixed<<setprecision(2)<<A;
if(B>=0) cout<<"+";
cout<<fixed<<setprecision(2)<<B<<'i'<<endl;
}