今升一颗星,向老马学习,散分。以下代码请提意见:
Option Explicit
    Dim sjs As String
    Dim sjh As String
    Dim sj() As String
    Dim sjc(1 To 3) As String
    Dim i As Integer
    Dim jw As Integer
    Dim l As BytePrivate Sub Command1_Click()
    sjs = "111"
    For l = 1 To 110
        js
    Next
    Text2 = Len(Text1)
    Text3 = Val(Text1)
    Print "个位值="; Mid(sjs, 228, 1)
    Print "十位值="; Mid(sjs, 228 - 1, 1)
    Print "百位值="; Mid(sjs, 228 - 2, 1)
End SubPrivate Sub Form_Load()
    Text1 = ""
    Text2 = ""
    Text3 = ""
End SubPrivate Sub js()
    sjh = ""
    Text1 = sjs
    Text1.Refresh
    sjc(1) = "00" & sjs
    sjc(2) = "0" & sjs & "0"
    sjc(3) = sjs & "00"
    ReDim sj(1 To Len(sjc(1)))
    For i = Len(sjc(1)) To 1 Step -1
        sj(i) = Val(Mid(sjc(1), i, 1)) + Val(Mid(sjc(2), i, 1)) + Val(Mid(sjc(3), i, 1)) + jw
        If Len(sj(i)) = 2 And i <> 1 Then '进位计算
            jw = Val(Mid(sj(i), 1, 1))
            sj(i) = Val(Mid(sj(i), 2, 1))
        ElseIf Len(sj(i)) = 1 Then
            jw = 0
            sj(i) = sj(i)
        ElseIf Len(sj(i)) = 2 And i = 1 Then
            sj(i) = sj(i)
            jw = 0
        End If
        sjh = sj(i) & sjh
    Next
    sjs = sjh
    Text1 = sjs
End Sub

解决方案 »

  1.   

    避免论坛贴子的空格弊端,另贴代码:
    Option Explicit
        Dim sjs As String
        Dim sjh As String
        Dim sj() As String
        Dim sjc(1 To 3) As String
        Dim i As Integer
        Dim jw As Integer
        Dim l As BytePrivate Sub Command1_Click()
        sjs = "111"
        For l = 1 To 110
            js
        Next
        Text2 = Len(Text1)
        Text3 = Val(Text1)
        Print "个位值="; Mid(sjs, 228, 1)
        Print "十位值="; Mid(sjs, 228 - 1, 1)
        Print "百位值="; Mid(sjs, 228 - 2, 1)
    End SubPrivate Sub Form_Load()
        Text1 = ""
        Text2 = ""
        Text3 = ""
    End SubPrivate Sub js()
        sjh = ""
        Text1 = sjs
        Text1.Refresh
        sjc(1) = "00" & sjs
        sjc(2) = "0" & sjs & "0"
        sjc(3) = sjs & "00"
        ReDim sj(1 To Len(sjc(1)))
        For i = Len(sjc(1)) To 1 Step -1
            sj(i) = Val(Mid(sjc(1), i, 1)) + Val(Mid(sjc(2), i, 1)) + Val(Mid(sjc(3), i, 1)) + jw
            If Len(sj(i)) = 2 And i <> 1 Then '进位计算
                jw = Val(Mid(sj(i), 1, 1))
                sj(i) = Val(Mid(sj(i), 2, 1))
            ElseIf Len(sj(i)) = 1 Then
                jw = 0
                sj(i) = sj(i)
            ElseIf Len(sj(i)) = 2 And i = 1 Then
                sj(i) = sj(i)
                jw = 0
            End If
            sjh = sj(i) & sjh
        Next
        sjs = sjh
        Text1 = sjs
    End Sub
      

  2.   

    To cike_1111
    你的理解正确,是应BAIDU网友短消息的要求而做。
      

  3.   

    To   cike_1111
    Text1中不是正显示字符串表示的计算结果吗:
    10736201288847422580121456504669550195985072399422480480477591117562
    50761957833470224912261700936346214661037430929869677777863300673101
    59463303558666910091026017785587295539622142057315437069730229375357
    546494103400699864397711
    共228字符长。
      

  4.   

    其实问题有点特殊 所以可以简化
    首先可以确认 个位数 1
    十位数 (1*111)mod 10=1 '这里111 表示指数
    百位数 (111+1)*111/2 mod 10=6
      

  5.   

    BAIDU网友iegerm短消息内容:
    今天在网上看到一个题:求111的111次方的个位、十位、百位数分别是几 ?
    我想帮帮忙,但没弄出来。
    请用您的方法给出答案:  ?8 另外。我想把这个数完全显示出来:111^111   我还以为很简单,就算:111^111,它的结果为:1.07362012888474E+227
    因为10000000000(后面十个零)=1E+10
       所以它应该=1.07362012888474*1(1后面跟227个零)
       也就是说,完整的它应该有228位数字。,,也不算多啊。就几排而以。怎么让它全部显示在一个文本框里!!!!!!!!我好想知道答案。
      

  6.   

    Text1中不是正显示字符串表示的计算结果吗: 
    10736201288847422580121456504669550195985072399422480480477591117562 
    50761957833470224912261700936346214661037430929869677777863300673101 
    59463303558666910091026017785587295539622142057315437069730229375357 
    546494103400699864397711 
    共228字符长。// 我的意思是 把解决这个的方法写成一个函数收藏起来比如
    dim b as string 
    a=111
    for i = 1 to 110
    a=a*111
    next i 
    b=函数(a)
    输出的结果b=228字符长的字串我希望有人能把这个 函数 写出来 不仅只适用这个题目....
      

  7.   

    求最后3位根本不用计算完整值,以下结果就是711
    Sub Main()
        Dim i As Long, l As Long
        l = 1
        For i = 1 To 111
            l = (l * 111) Mod 1000
        Next
        Debug.Print l
    End Sub
      

  8.   

    上面错了
    百位数应该是
    (((111+1)*111/2 mod 10)+ 111 \10)mod 10 = 7
      

  9.   

    Tiger_Zhao VB老鸟的代码不错,谢谢!,但原题要求:把这个数完全显示出来
    是否有更好的方法?
    依据Tiger_Zhao VB老鸟的代码,略做修改,可获得最后7位数字Private Sub Command1_Click()
        Dim i As Long, l As Long
        l = 1
        For i = 1 To 111
            l = (l * 111) Mod 10000000
        Next
        Text1 = l
    End Sub
      

  10.   

    >求111的111次方的个位、十位、百位数分别是几的VB代码解决方案
    难道这不是中文?
      

  11.   

    >求111的111次方的个位、十位、百位数分别是几的VB代码解决方案
    难道这不是中文?
      

  12.   

    TO Tiger_Zhao   VB老鸟,:
    就求111的111次方的个位、十位、百位数分别是几的VB代码解决方案,你的代码最佳.咱愿望是提升VB论坛的人气,而不是
    到此为斗嘴的,惹你如此生气,非常抱歉.
    题目来源如下(属中文):
    BAIDU网友iegerm短消息内容: 
    今天在网上看到一个题:求111的111次方的个位、十位、百位数分别是几   ? 
    我想帮帮忙,但没弄出来。 
    请用您的方法给出答案:   ?8 另外。我想把这个数完全显示出来:111^111    我还以为很简单,就算:111^111,它的结果为:1.07362012888474E+227 
    因为10000000000(后面十个零)=1E+10 
       所以它应该=1.07362012888474*1(1后面跟227个零) 
       也就是说,完整的它应该有228位数字。,,也不算多啊。就几排而以。怎么让它全部显示在一个文本框里!!!!!!!!我好想知道答案。
      

  13.   

    TO firefoxxx
    你怎么知道111的111次方的最后三位数
    见17楼和6楼代码
      

  14.   

    呵呵,有规律的
    个位固定是1
    十位循环0123456789
    百位也会循环13605186567926174212358273087891483964345704952090const
      CODE = '01360518656792617421235827308789148396434570495209';
    var
      N: Integer;
      A, B, C: Char;
    begin
      N := 111;
      C := '1';
      B := '0123456789'[N mod 10 + 1];
      A := CODE[N mod Length(CODE) + 1];
      Writeln(A + B + C);
    end;
      

  15.   

    Dim CODE() As Long = {0, 1, 3, 6, 0, 5, 1, 8, 6, 5, 6, 7, 9, 2, 6, 1, 7, 4, 2, 1, 2, 3, 5, 8, 2, 7, 3, 0, 8, 7, 8, 9, 1, 4, 8, 3, 9, 6, 4, 3, 4, 5, 7, 0, 4, 9, 5, 2, 0, 9}
    Dim CODE_LEN As Long = 50
    Dim L As Long
    Dim N As Long = 111
    L = 1 + 10 * (N Mod 10) + 100 * CODE(N Mod CODE_LEN)
      

  16.   

    完整计算推荐用gxqcn的HugeCalc(http://topic.csdn.net/u/20071210/21/b30b831f-0099-48a8-bbbb-fc237ed593fd.html)
    自己编代码运算可以参考《系列文章-大数阶算之计算从入门到精通》(http://blog.csdn.net/liangbch/category/292924.aspx)
      

  17.   

    upup,试问下lz,有没有比暴力算更好的方法,谢谢
      

  18.   

    早期习作:Sub power(ByVal x As Long, ByVal n As Long, Optional ByRef result As String)
    Dim a() As Long, s() As String, i As Long, k As Long, temp As Long
    ReDim a(1 To 1)
    a(1) = 1
    stimer = Timer
    Do While k < n
    k = k + 1
    temp = UBound(a)
    For i = 1 To temp
    a(i) = a(i) * x
    Next
    ReDim Preserve a(1 To temp + Len(CStr(x)))
    For i = 1 To UBound(a) - 1
    temp = a(i) \ 10
    a(i) = a(i) Mod 10
    a(i + 1) = a(i + 1) + temp
    Next
    temp = UBound(a)
    If a(temp) = 0 Then ReDim Preserve a(1 To temp - 1)
    Loop
    temp = UBound(a)
    ReDim s(1 To temp)
    For i = 1 To temp
    s(i) = a(temp + 1 - i)
    Next
    result = Join(s, "")
    Debug.Print result
    Debug.Print x & "^" & n & " : 用时 "; Timer - stimer & " 秒, 结果 " & temp & " 位"
    Erase a()
    Erase s()
    End SubSub getit()
    power 111, 111
    End Sub
      

  19.   

    实现上,数学还是很有用!
    如果把111^111看成是(1+110)^111,然后用泰勒级数展开,可得:1+111*110+(111*110/2!)*110^2+(111*110*109/3!)*110^3+.......
    由于求得最高位是百位,所以110^2以后的项已经没有用了!
    所以只求前三项的和就可以得111^111的个位、十位、百位了!
    Private Sub Form_Load()
    Dim l As Long, s As String
    l = 1 + 111 * 110 + 111 * 110 / 2 * 110 ^ 2
    s = CStr(l)
    Debug.Print "个位:"; Right(s, 1)
    Debug.Print "十位:"; Left(Right(s, 2), 1)
    Debug.Print "百位:"; Left(Right(s, 3), 1)End Sub
      

  20.   

    今CSDN发生了无法结贴,真是遗憾!
    进入管理贴子,只有 我要提问 生成贴子 删除贴子 修改贴子 锁定贴子 贴子加分
                                                                            无满意结贴
    几项
    无结贴项
    !!!!
    !!!
    !!
      

  21.   

    今CSDN发生了无法结贴,真是遗憾! 
    进入管理贴子,只有   我要提问   生成贴子   删除贴子   修改贴子   锁定贴子   贴子加分 无满意结贴
    几项 
    无结贴项 
    !!!! 
    !!! 
    !!