m******u 发帖数: 12400 | 1 def sum_of_fraction(N, D):
sum = []
sum.append (N[0])
sum.append (D[0])
for i in range(1, len(N)):
sum[0] = sum[0] * D[i] + sum[1] * N[i]
sum[1] = sum[1] * D[i]
m = min(sum)
for j in range(2,m):
if sum[0] % j ==0 and sum[1] % j == 0:
sum[0] = sum[0] / j
sum[1] = sum[1] / j
return sum
N = [2, 3, 56, 43, 23, 5, 6, 94, 27, 54]
D = [43, 23, 45, 45, 56 ,38, 102, 45, 21, 76]
print(sum_of_fraction(N,D))
N = [1, 1, 1, 1]
D = [4, 4, 4, 4]
print(sum_of_fraction)
数组N和D分别用来存放分数的分子和分母。数组sum用来存放求和结果,它有两个元素
,一个是和的分子(sum0),另一个是何的分母(sum)。每次求和之后立马约分化简
。 | X****r 发帖数: 3557 | 2 你约分那个循环不对,不能约成最简,加几次后m就大得不行,算不动了。应该直接拿
辗转相除法求最大公约数约分。
【在 m******u 的大作中提到】 : def sum_of_fraction(N, D): : : sum = [] : : sum.append (N[0]) : sum.append (D[0]) : for i in range(1, len(N)): : sum[0] = sum[0] * D[i] + sum[1] * N[i] : sum[1] = sum[1] * D[i] : m = min(sum)
| m******u 发帖数: 12400 | 3 实际上这个循环似乎没有运行,是咋回事?
如果我用简单数字为例,不会太复杂,不应该出现死机现象。最后算出来,怎么是不约
分化简的分数。 | m******u 发帖数: 12400 | 4 而且结果还是错的。
尼玛,1/5+2/6+3/7+4/8 = 614/420!? | X****r 发帖数: 3557 | 5 就是没有约分嘛,不是跟你说了你约分那个循环不对吗,比如要是可以被四约你就只会
除以二,你应该用辗转相除法求最大公约数既对又快。
【在 m******u 的大作中提到】 : 而且结果还是错的。 : 尼玛,1/5+2/6+3/7+4/8 = 614/420!?
|
|