题目
复数可以写成 (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
个人觉得这道题的答案很不科学
以下为AC代码(从网上找的)
#网上找
#就很不科学(如果有0的话)
import math
a = [float(i) for i in input().split()]
x1 = a[0]*math.cos(a[1])
x2 = a[0]*math.sin(a[1])
y1 = a[2]*math.cos(a[3])
y2 = a[2]*math.sin(a[3])
z1 = x1*y1-x2*y2
z2 = x1*y2+x2*y1
if z1+0.005>=0 and z1<0:
z1 = '0.00'
else:
z1 = '%.2f'%z1
if z2+0.005>=0 and z2<0:
z2 = '+0.00i'
elif z2>=0:
z2 = '+%.2fi'%z2
else:
z2 = '%.2fi'%z2
print(z1+z2)
问题分析
这段代码如果输入 0 0 0 0,会输出0.00+0.00i,
输入9 0 9 0,会输出81.00+0.00i
如果输入0 3 0 3,会输出0.00±0.00i,这个式子居然出现了±符号,就很离谱
然而这样却是很标准的答案代码
事实上,如果输入0 0 0 0应该输出0.00,输入9 0 9 0,应该输出81.00,输入0 3 0 3,因该输出0.00
以下为重新写的角边形式复数乘法代码:
#1051 复数的乘法
#三角函数的使用 个人觉得是正解
def main(s):
for i in range(len(s)):
s[i] = float(s[i])
a=[0]*4
a[0] = s[0]*(math.cos(s[1]))
a[1] = s[0]*(math.sin(s[1]))
a[2] = s[2]*(math.cos(s[3]))
a[3] = s[2]*(math.sin(s[3]))
r = a[0]*a[2] - a[1]*a[3]
i = a[0]*a[3] + a[1]*a[2]
r_n = list(str(a[0]*a[2] - a[1]*a[3]))
i_n = list(str(a[0]*a[3] + a[1]*a[2]))
fenge1 = r_n.index('.')+1
fenge2 = i_n.index('.')+1
if r==0 and i==0:
print('0.00')
return
if r == 0:
r_n = ''
elif len(r_n[fenge1:])>=2:
r_n = list(str(round(r,2)))
else:
while len(r_n[fenge1:]) < 2:
r_n.append('0')
if i == 0:
i_n = ''
elif len(i_n[fenge2:])>=2:
i_n = list(str(round(i,2)))
if i>0:
i_n.insert(0,'+')
i_n.append('i')
else:
while len(i_n[fenge2:]) < 2:
i_n.append('0')
if i>0:
i_n.insert(0,'+')
i_n.append('i')
print(''.join(r_n),end = '')
print(''.join(i_n),end = '')
import math
s = input().split(' ')
main(s)
'''
#网上找
#就很不科学(如果有0的话)
import math
a = [float(i) for i in input().split()]
x1 = a[0]*math.cos(a[1])
x2 = a[0]*math.sin(a[1])
y1 = a[2]*math.cos(a[3])
y2 = a[2]*math.sin(a[3])
z1 = x1*y1-x2*y2
z2 = x1*y2+x2*y1
if z1+0.005>=0 and z1<0:
z1 = '0.00'
else:
z1 = '%.2f'%z1
if z2+0.005>=0 and z2<0:
z2 = '+0.00i'
elif z2>=0:
z2 = '+%.2fi'%z2
else:
z2 = '%.2fi'%z2
print(z1+z2)
'''
这样就符合生活逻辑了