1051 复数的乘法 python实现 以及一些问题

题目

复数可以写成 (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)
'''

这样就符合生活逻辑了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值