#一元二次方程标准形式:ax*x+bx+c=0
def showFac(num):
'''分解出两个因数,返回这两个因数组成的列表
但是这个只能得到最大公因数和另外一个因数,还需要完善才能应用
'''
count=num//2
while count>1:
if num%count==0:
return [count,num//count]
break
count-=1
else:
return [num,1]
a = int(input('请输入整数a:'))
b = int(input('请输入整数b:'))
c = int(input('请输入整数c:'))
#把a和c分别分解出两个因数保存到两个列表ar和cr
ar = showFac(a)
cr = showFac(c)
#判断上一步凑出的因数是否可以能用来做十字相乘
if ar[0]*cr[1]+ar[1]*cr[0]==b:
#模拟十字相乘法过程
#按照十字相乘法写出来(ar[0]*x+cr[0])+(ar[1]*x+cr[1])=0
#得到x1,x2并转为string类型
#注意用自然除
x1 = str(-cr[0]/ar[0])
x2 = str(-cr[1]/ar[1])
#把x1,x2小数点左边和右边分别切出来
(x1_point_left, x1_point_right) = x1.split('.',1)
(x2_point_left, x2_point_right) = x2.split('.',1)
#看小数点右边不为零即无法整除的情况
if x1_point_right != '0':
#为了精确就输出分数形式
print('x=',-cr[0],'/',ar[0])
else:
#可以整除,直接输出x1
print('x=',x1)
if x2_point_right != '0':
print('x=',-cr[1],'/',ar[1])
else:
print('x=',x2)
else:
print('对不起无法解答')
我用的python写的,没学过c语言,这个只能解一部分一元二次方程,因为分解因数的那个函数不能凑出多种因数 |