作业帮 > 综合 > 作业

VB中求同构数的问题,有关mid(s,p,n),

来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/17 12:08:51
VB中求同构数的问题,有关mid(s,p,n),
求1000以内的“同构数”.“同构数”:一个数它出现在它的平方数的右边.例如:5*5=25,5是25中右侧的数;25*25=625,25是625中右侧的数,所以25和625都是“同构数”.
以下是我写的程序:
Private Sub Form_load()
Show
Dim i As Integer,s As Variant,n As Long,m As Long,b As Variant
Print "1000以内的同构数为:"
For i = 1 To 1000
s = Str(i ^ 2)
b = Str(i)
n = Len(b)
m = Len(s)
k = i
If k = Val(Mid(s,m - n + 2,n)) Then
Print i,s
End If
Next i
End Sub
有个地方让我一直运行不出来,就是Mid(s,m - n + 2,n)处.
我最初写的是Mid(s,m - n + 1,n),所以只出现1 1和625 390625.后来只输出 i 和Mid(s,m - n + 1,n)的时候,发现结果是 625 0625(四位),才发现这个错误.可是请问这是为什么呢?
Mid(s,p,n)不是表示取从字符串s左边第p个字符开始的n个字符吗?那上面625那种情况,不就是n=3,m=6 得出p=4呀,从第4个开始取3个,怎么会出现0625的情况呢?虽然用Mid(s,m - n + 2,n)是正确的,但是用实际情况代进去是从第5个开始取3个,390625只有6位,应该是错误的啊.T-T 非常非常非常感谢.
VB中求同构数的问题,有关mid(s,p,n),
不要用Str()函数,它会在正数前面自动添加一个空格的,这样就会造成计算错误了.要改用CStr()函数.用下面的代码最简单:
Private Sub Form_load()
Show
Dim i As Integer
Print "1000以内的同构数为:"
For i = 1 To 1000
If i = Val(Right(i ^ 2,Len(CStr(i)))) Then Print i,i ^ 2
Next i
End Su