我的代码:
Private Sub btnReduce_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnReduce.Click
Call Reduce()
End Sub
Function Reduce() As Single
Dim num As Integer = txtNum.Text
Dim deno As Integer = txtDeno.Text
For i = 1 To deno Step +1
If num Mod i = 0 Then
num = num / i
End If
If deno Mod i = 0 Then
deno = deno / i
End If
Next
lblOutputNum.Text = num
lblOutputDeno.Text = deno
End Function当我输入2/4时,它会给我1/2。但当我输入3/6时,它会给我1/1。有人知道为什么会这样吗?因为我搞不懂这个。感谢任何有能力的人。
发布于 2014-06-08 15:39:43
您不能将分子和分母彼此分开,否则您将更改分数的值:
For i = 1 To Math.Min(deno, num)/2 Step +1
If num Mod i = 0 And deno Mod i = 0 Then
num = num / i
deno = deno / i
End If
Next请记住,这种方法的性能并不是很好。你需要将分子和分母除以它们的最大公约数。GCD可以用欧几里德算法来计算。
发布于 2015-11-02 23:55:33
使用Nico的例子,我设法进一步减少了分数。
For i = 1 To Math.Min(deno, num)/2 Step +1
If num Mod i = 0 And deno Mod i = 0 Then
num = num / i
deno = deno / i
End If
If i > 1 Then
While nume Mod i = 0 And deno Mod i = 0
nume = nume / i
deno = deno / i
End While
End If
Nexthttps://stackoverflow.com/questions/24103964
复制相似问题