鱼C论坛

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

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

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

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

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

x
用c++如何写一个十字相乘法解一元二次方程呢?
最佳答案
2018-2-14 13:04:02
  1. #一元二次方程标准形式:ax*x+bx+c=0
  2. def showFac(num):
  3.     '''分解出两个因数,返回这两个因数组成的列表
  4.     但是这个只能得到最大公因数和另外一个因数,还需要完善才能应用
  5.     '''
  6.     count=num//2
  7.     while count>1:
  8.         if num%count==0:
  9.             return [count,num//count]
  10.             break
  11.         count-=1
  12.     else:
  13.         return [num,1]

  14. a = int(input('请输入整数a:'))
  15. b = int(input('请输入整数b:'))
  16. c = int(input('请输入整数c:'))
  17. #把a和c分别分解出两个因数保存到两个列表ar和cr
  18. ar = showFac(a)
  19. cr = showFac(c)
  20. #判断上一步凑出的因数是否可以能用来做十字相乘
  21. if ar[0]*cr[1]+ar[1]*cr[0]==b:
  22.     #模拟十字相乘法过程
  23.     #按照十字相乘法写出来(ar[0]*x+cr[0])+(ar[1]*x+cr[1])=0
  24.     #得到x1,x2并转为string类型
  25.     #注意用自然除
  26.     x1 = str(-cr[0]/ar[0])
  27.     x2 = str(-cr[1]/ar[1])
  28.     #把x1,x2小数点左边和右边分别切出来
  29.     (x1_point_left, x1_point_right) = x1.split('.',1)
  30.     (x2_point_left, x2_point_right) = x2.split('.',1)
  31.     #看小数点右边不为零即无法整除的情况
  32.     if x1_point_right != '0':
  33.         #为了精确就输出分数形式
  34.         print('x=',-cr[0],'/',ar[0])
  35.     else:
  36.         #可以整除,直接输出x1
  37.         print('x=',x1)
  38.     if x2_point_right != '0':
  39.         print('x=',-cr[1],'/',ar[1])
  40.     else:
  41.         print('x=',x2)
  42. else:
  43.     print('对不起无法解答')
复制代码

我用的python写的,没学过c语言,这个只能解一部分一元二次方程,因为分解因数的那个函数不能凑出多种因数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-14 13:04:02 | 显示全部楼层    本楼为最佳答案   
  1. #一元二次方程标准形式:ax*x+bx+c=0
  2. def showFac(num):
  3.     '''分解出两个因数,返回这两个因数组成的列表
  4.     但是这个只能得到最大公因数和另外一个因数,还需要完善才能应用
  5.     '''
  6.     count=num//2
  7.     while count>1:
  8.         if num%count==0:
  9.             return [count,num//count]
  10.             break
  11.         count-=1
  12.     else:
  13.         return [num,1]

  14. a = int(input('请输入整数a:'))
  15. b = int(input('请输入整数b:'))
  16. c = int(input('请输入整数c:'))
  17. #把a和c分别分解出两个因数保存到两个列表ar和cr
  18. ar = showFac(a)
  19. cr = showFac(c)
  20. #判断上一步凑出的因数是否可以能用来做十字相乘
  21. if ar[0]*cr[1]+ar[1]*cr[0]==b:
  22.     #模拟十字相乘法过程
  23.     #按照十字相乘法写出来(ar[0]*x+cr[0])+(ar[1]*x+cr[1])=0
  24.     #得到x1,x2并转为string类型
  25.     #注意用自然除
  26.     x1 = str(-cr[0]/ar[0])
  27.     x2 = str(-cr[1]/ar[1])
  28.     #把x1,x2小数点左边和右边分别切出来
  29.     (x1_point_left, x1_point_right) = x1.split('.',1)
  30.     (x2_point_left, x2_point_right) = x2.split('.',1)
  31.     #看小数点右边不为零即无法整除的情况
  32.     if x1_point_right != '0':
  33.         #为了精确就输出分数形式
  34.         print('x=',-cr[0],'/',ar[0])
  35.     else:
  36.         #可以整除,直接输出x1
  37.         print('x=',x1)
  38.     if x2_point_right != '0':
  39.         print('x=',-cr[1],'/',ar[1])
  40.     else:
  41.         print('x=',x2)
  42. else:
  43.     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-3-29 08:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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