分数 15
作者 CHEN, Yue
单位 浙江大学
复数可以写成 (A+Bi) 的常规形式,其中 A 是实部,B 是虚部,i 是虚数单位,满足 i ^2=−1;也可以写成极坐标下的指数形式 (R×e ^(Pi)),其中 R 是复数模,P 是辐角,i 是虚数单位,其等价于三角形式 R(cos§+isin§)。
现给定两个复数的 R 和 P,要求输出两数乘积的常规形式。
输入格式:
输入在一行中依次给出两个复数的 R 1 , P 1, R 2, P 2,数字间以空格分隔。
输出格式:
在一行中按照 A+Bi 的格式输出两数乘积的常规形式,实部和虚部均保留 2 位小数。注意:如果 B 是负数,则应该写成 A-|B|i 的形式。
输入样例:
2.3 3.5 5.2 0.4
输出样例:
-8.68-8.23i
思路分析
按照计算公式计算即可
错误分析-测试点3无法通过
- 如果b非常小的话b < 0 && b > -0.005,此时b会输出为-0.00而非+0.00,因此要特殊判断。a也如此
- double精度比float高,建议以后这类题都用double,以double输入,输出不一定,但也建议double输出。
代码实现
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main(){
double r1,p1,r2,p2;
scanf("%lf%lf%lf%lf",&r1,&p1,&r2,&p2);
double a = r1 * r2 * cos(p1 + p2);
double b = r1 * r2 * sin(p1 + p2);
if(b < 0 && b > -0.005){
b = 0;
}
if(a < 0 && a > -0.005){
a = 0;
}
if(b < 0){
printf("%.2f%.2fi",a,b);
}
else{
printf("%.2f+%.2fi",a,b);
}
}
参考
PAT basic 1051 复数乘法 (15分) C++ 测试点3 错误点详解
1051 复数乘法 (15 分)(测试点2、3答案错误)(算法分析+代码实现)