|
发表于 2018-2-14 13:04:02
|
显示全部楼层
本楼为最佳答案
- #一元二次方程标准形式: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语言,这个只能解一部分一元二次方程,因为分解因数的那个函数不能凑出多种因数 |
|