查看原题目请点我
解题思路:这道题复杂在最后的两个测试点,这里牵涉到先四舍五入再比较和先比较后四舍五入的问题 。显然我们需要的是前一种,所以中间需要特殊处理一下算出来的数。题目给的是极坐标,但是可以用欧拉公式转换后的三角公式算,两个乘一下就行了,但是我算的时候发现可以用合并,cosAcosB - sinAsinB = cos(A+B)。我也只是记得到个大概,反正有例子,测试一下后,发现公式中的加减号写反了,然后才改正确。

#include<cstdio>
#include<cmath>
int main(){
    double r1,p1,r2,p2;
    scanf("%lf%lf%lf%lf",&r1,&p1,&r2,&p2);
    double tmp=r1*r2;
    double a=cos(p1+p2)*tmp;
    double b=sin(p1+p2)*tmp;
    int x,y;
    //如果是正数四舍五入是加0.5然后取整 如果是负数是减0.5然后取整
    if(a>0)   
         x=(int)(a*100+0.5);
    else     
         x=(int)(a*100-0.5);
    if(b>0)
         y=(int)(b*100+0.5);
    else
         y=(int)(b*100-0.5);

    //关键是判断y是否小于0,比如说-0.00001保留两位以后变成0.00,应该输出的是+0.00而按照惯性你的程序输出应该是-0.00
    //显然0.00>=0应该输出+呀,怎么会是-呢
    //所以这道题还是有点东西的 
    if(y<0)
        printf("%.2f%.2fi",x/100.0,y/100.0); else printf("%.2f+%.2fi",x/100.0,y/100.0);

    return 0;
}