求1!+2!+3!+4!……+100!,程序如下Private Sub Form_Load()
    Dim i,  sum, temp As Integer
    sum = 0
    temp = 1
    For i = 1 To 100
        temp = temp * i          '说这行有溢出错误
        sum = sum + temp
    Next i
    Print sum
    Text1.Text = sum
End Sub这段程序有错误,十分不解,请教各位高手错误的原因,与修改方法,十分感谢。

解决方案 »

  1.   

    dim i as long
    dim sum as long
    dim temp as long
      

  2.   

    改成这样就行啦
    Private Sub Command1_Click()
        Dim i As Integer
        Dim sum As Double
        Dim temp As Double
        
        sum = 0
        temp = 1
        For i = 1 To 100
            temp = (temp) * CDbl(i)
            sum = sum + temp
        Next i
        Print sum
        Text1.Text = sumEnd Sub
      

  3.   

    Long型的范围为-2147483648 到 + 2147483647 长度还是不够而 Double 双精度型的范围为 +/-5E-324 到+/-1E308CDbl是用于类型转换的,如此处不进行类型转换,系统会把结果认为是整型数也会溢出的
      

  4.   

    直接Dim i As Double就不用转换了:Private Sub Command1_Click()
        Dim i As Double
        Dim sum As Double
        Dim temp As Double
        
        sum = 0
        temp = 1
        For i = 1 To 100
            temp = (temp) * i
            sum = sum + temp
        Next i
        Print sum
        End Sub
      

  5.   

    最后,说一句:
    这样的大数运算最好用字串完成,因为到一定程度double也会溢出
      

  6.   

    同意楼上,管你什么double,楼主要是来个~~~200!,不挂才见鬼了大数乘法,以这个作为关键词,google一下,有代码的,好好研究一下。
      

  7.   

    求1!+2!+3!+4!……+100!,程序如下
    Private Sub Form_Load()
        Dim i,  sum, temp As Integer
        sum = 0
        temp = 1
        For i = 1 To 100
            temp = temp * i          '说这行有溢出错误
            sum = sum + temp
        Next i
        Print sum
        Text1.Text = sum
    End Sub'----------------------------------------
    1.算法是错误的.
         DIM T AS LONG 
        For i = 1 To 100
            TEMP=1
             FOR T=1 TO I
                  TEMP=TEMP*T 
             NEXT
            sum = sum + temp
        Next i2.
        Dim i,  sum, temp As Integer
        这些数被定义为INTEGER. 肯定不行,因为INTEGER最大只能是 32767
        所以,应该将其定义为DOUBLE.