复数可以写成 (A+Bi) 的常规形式,其中 A 是实部,B 是虚部,i 是虚数单位,满足 i2=−1;也可以写成极坐标下的指数形式 (R×e(Pi)),其中 R 是复数模,P 是辐角,i 是虚数单位,其等价于三角形式 R(cos§+isin§)。
现给定两个复数的 R 和 P,要求输出两数乘积的常规形式。
输入格式:
输入在一行中依次给出两个复数的 R1 , P1 , R2 , P2,数字间以空格分隔。
输出格式:
在一行中按照 A+Bi 的格式输出两数乘积的常规形式,实部和虚部均保留 2 位小数。注意:如果 B 是负数,则应该写成 A-|B|i 的形式。
输入样例:
2.3 3.5 5.2 0.4
// 结尾无空行
输出样例:
-8.68-8.23i
// 结尾无空行
解题代码:
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let r1 = 0, p1 = 0;
let r2 = 0, p2 = 0;
rl.on('line', function(line) {
const Numarr = line.split(' ');
r1 = parseFloat(Numarr[0]);
p1 = parseFloat(Numarr[1]);
r2 = parseFloat(Numarr[2]);
p2 = parseFloat(Numarr[3]);
})
/*当A或者B小于0但是大于-0.005(比如-0.00001)时候,
如果按照A>=0的判断,会输出“-0.00”这样的结果,
事实上应该输出“0.00”【B同理,应该输出“+0.00i”】*/
rl.on('close', function() {
const cos = Math.cos, sin = Math.sin;
let n1 = ((r1 * r2) * (cos(p1) * cos(p2) - sin(p1) * sin(p2)));
let n2 = ((r1 * r2) * (cos(p1) * sin(p2) + cos(p2) * sin(p1)));
if (n1 + 0.005 >= 0 && n1 < 0)
rl.output.write("0.00");
else
rl.output.write(`${n1.toFixed(2)}`);
if(n2 >= 0)
rl.output.write(`+${n2.toFixed(2)}i`);
else if (n2 + 0.005 >= 0 && n2 < 0)
rl.output.write("+0.00i");
else
rl.output.write(`${n2.toFixed(2)}i`);
return 0;
})