首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >还原分数

还原分数
EN

Stack Overflow用户
提问于 2014-06-08 15:33:14
回答 2查看 1.3K关注 0票数 0

我的代码:

代码语言:javascript
复制
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。有人知道为什么会这样吗?因为我搞不懂这个。感谢任何有能力的人。

EN

回答 2

Stack Overflow用户

发布于 2014-06-08 15:39:43

您不能将分子和分母彼此分开,否则您将更改分数的值:

代码语言:javascript
复制
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可以用欧几里德算法来计算。

票数 2
EN

Stack Overflow用户

发布于 2015-11-02 23:55:33

使用Nico的例子,我设法进一步减少了分数。

代码语言:javascript
复制
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
Next
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24103964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档