查看原题目请点我
解题思路:这道题复杂在最后的两个测试点,这里牵涉到先四舍五入再比较和先比较后四舍五入的问题 。显然我们需要的是前一种,所以中间需要特殊处理一下算出来的数。题目给的是极坐标,但是可以用欧拉公式转换后的三角公式算,两个乘一下就行了,但是我算的时候发现可以用合并,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;
}