只是一个算法题当时着急晕呼啦!第2天就想起算法了~
求1/N的第M位!N,M分别为大于一的任意数~!大家想想,也许你们都知道~其实很简单~只是个算法~争取下回你们面试 遇到不会晕~
答案按正常算术 肯定不行~按除法的计算原理~ 哦啦提示到这~

解决方案 »

  1.   

    好久没用VB了,有语法错误不要怪我哦,就当成伪代码来看吧。
    M 和 N 就是题目里的M、N    a = 1
        for i = 1 To M - 1
            a = (a * 10) mod N
        next i
        print int(a * 10 / N)
      

  2.   

    求1/N的第M位!N,M分别为大于一的任意数~!??????
    严重不明!!
    什么叫做求1/N的第M位!???
    什么叫做N,M分别为大于一的任意数~!??????
    比如呢?
    比如N=10 ,M=20
    那么要求的是什么??1/N的第M位 就是 1/10 的第20位??啥意思???
      

  3.   

    简单的问题简单回答:
    M=M-1
    msgbox ((10^M)\N) mod 10
      

  4.   

    求1/N的第M位!N,M分别为大于一的任意数~!??????
    严重不明!!
    什么叫做求1/N的第M位!???
    什么叫做N,M分别为大于一的任意数~!??????
    比如呢?
    比如N=10 ,M=20
    那么要求的是什么??1/N的第M位 就是 1/10 的第20位??啥意思???
    就是可以看到1/10的20位 例如,0.1000000000000000000000000000000000000000000000
    1/9的第20位 0.1111111111111111111111111111111111111111111111111111111111111
    你的明白!!
      

  5.   

    a = 1
        for i = 1 To M - 1
            a = (a * 10) mod N
        next i
        print int(a * 10 / N)看不懂你的算法
    例如 1/9的第20位 
    在你的一顿循环后 a 还是1啊!
    你打印的整型还是0啊!
    不对吧 !!!
      

  6.   

    简单的问题简单回答:
    M=M-1
    msgbox ((10^M)\N) mod 10
    例如1/9的20位
    10的19次幂/9 在10的余数吗?   小弟太菜  
    有些看不懂啊!他不也纯在数据益处的问题吗? 你要看 500位呢???
      

  7.   

    Private Sub Test(M As Long, N As Long)
        Dim Temp As String
        Temp = Trim(Str(1 / N))
        If Len(Temp) < M Then MsgBox "没有值": Exit Sub
        Debug.Print Mid(Temp, M, 1)
    End Sub
      

  8.   

    '标准答案来了Private Function cal(N As Integer, M As Integer) As Integer
        Dim i As Integer
        Dim geshu As Integer
        Dim mintremain As Integer   '余数
        Dim bit As Integer    '商
        mintremain = 1    '分子为1
        For i = 1 To M
            geshu = countNum(mintremain, N)  '求得要乘以10的个数
            If M < (i - 1 + geshu) Then      '如果当前i+getshu-1大于M的
                cal = 0                      '第M为0
                Exit Function
            Else                             '否则将将i+geshu-1,表示当前已到达i+geshu-1位
                i = i + geshu - 1
            End If
            bit = Int(mintremain / N)       '商
            Debug.Print "第" & i & "位:" & bit
            mintremain = mintremain Mod N        '余数
            
            If mintremain = 0 Then               '如果被除断
                MsgBox "N在第" & i & "位被除断!"
                cal = 100
                Exit Function
            End If
        Next i
        cal = bit                                '返回商
        
    End Function'countNum表示要乘多少个10才能使分子大于分母
    Private Function countNum(mintremain As Integer, N As Integer) As Integer
        Dim mintNum As Integer
        Do While mintremain < N
            mintremain = mintremain * 10
            mintNum = mintNum + 1
        Loop
        countNum = mintNum
        Exit Function
    End FunctionPrivate Sub Command1_Click()
        Me.Caption = Str(cal(Val(Text1.Text), Val(Text2.Text)))
    End Sub
      

  9.   

    楼上的你测试通过了吗/
    我有个自己写的不过在网吧没测试
    dim k
    dim j
    dim l as string 
    dim a
    k=1
    j=len N'取得被除数的位数
    for i=0 to j 
    k =k & "0" 
    next
    '除法分步算 先提位去除
    for i=0 to M
    if i=0 then
     a = k mod N ‘例如N=9 K=10 N为90 K 为100
    else
    a = a * 10 mod N'以后每次余数*10
    end if 
    L = L & a'累加余数
    next
    magbox "0." & L
    我在网吧没法测试!望指点错误!!
      

  10.   

    wwqna(york) 兄
    看得有些晕啊!
    哈哈  大家都加油吧!还有什么好的算法 求教!!
      

  11.   

    ithure(ithure)的思路清晰,简单明了
      

  12.   

    狂晕啊,这个小问题怎么还有人贴一大堆代码出来啊
    ------------------
    a = 1
        for i = 1 To M - 1
            a = (a * 10) mod N
        next i
        print int(a * 10 / N)看不懂你的算法
    例如 1/9的第20位 
    在你的一顿循环后 a 还是1啊!
    你打印的整型还是0啊!
    不对吧 !!!
    ----------------
    hot1kang1(小许) 你先试一下我的代码再说吧,或者你没看清楚吧,唉……“在你的一顿循环后 a 还是1啊!”????你怎么看的啊???另外可以在for循环里加一个if语句,当a=0时跳出循环,这样遇到可以除尽的情况可以节约一点时间。
      

  13.   

    你们都不考虑,是否超过定义值的范围?
    如:1/198778888888888888888888888888888888888888888888
    的第8985458578642453453457867878位?
    ---------------------------- hiking() 
    考虑这个干嘛啊?我只保证在M、N不超出定义值范围的情况下,将结果算出来,你去考虑这个吧,你怎么解决?创造一个更NB的数据类型?是否应该先考虑一下电脑的计算能力呢?先去设计一台电脑吧
      

  14.   

    没看懂!
    写一个:dim  n as single
    n=123456789
    for i=1 to len(str(int(m)))
    print 1/val(left(m,i))
    next 应该不是这个意思!?
    看不懂你的叙述!
      

  15.   

    哇.我晕.楼上更厉害,居然想到用数组,佩服.如果用数组,理论上就是可以做无限的运算了.楼上说简单,我最开始就没有想到一个精度的问题!我是菜鸟,学习!!!!UP! ithure(ithure) 方法确实好.
      

  16.   

    严重同意ithure(ithure)
    反对的人在想什么呢
    搞不懂,就这么简单的个问题,人家贴出来了还还说这说那
      

  17.   

    ithure(ithure) 兄:
    你有没有想过a乘以10之后,a仍然少于分母,比如,N=9999,a=1 ,a*10/n会是什么样的情况。
    10/9999又会是多少呢?其它算法和大家都是一样的了,只不过多了一步,考虑了a要乘多少个以后才能大于分母.
    我的代码最优不敢说,但绝对正确,你们有没有测试过自己的代码?
      

  18.   

    ithure(ithure)兄:
    刚才试了一下,你的代码最优。
    我是庸人自优,自己多考虑了。