鱼C论坛

 找回密码
 立即注册
查看: 2542|回复: 2

[已解决]C++如何写一个十字相乘法的代码

[复制链接]
发表于 2018-2-12 13:12:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用c++如何写一个十字相乘法解一元二次方程呢?
最佳答案
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语言,这个只能解一部分一元二次方程,因为分解因数的那个函数不能凑出多种因数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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语言,这个只能解一部分一元二次方程,因为分解因数的那个函数不能凑出多种因数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-14 13:48:36 | 显示全部楼层
鱼油127327 发表于 2018-2-14 13:04
我用的python写的,没学过c语言,这个只能解一部分一元二次方程,因为分解因数的那个函数不能凑出多种因 ...

谢谢了,这个代码确实是没法推广,只能部分情况用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-29 09:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表