1、设a为一整数,如果能使a2=xxa成立,则称a为“守形数”。例如52=25,252=625,则5和25都是守形数。试编写一个Function过程Automorphic,其形参为一正整数,判断其是否为守形数,然后用该过程查找1-1000内的所有守形数。
Private Sub Form_click()
Dim n As Single 'n不可使用integer,如使用integer则会产生数据溢出
For n = 1 To 1000 '测试1~1000的数字
If automorphic(n) = True Then '调用函数
Print "n*n="; n * n, n; "是一个守形数"
End If
Next n
End Sub
Function automorphic(n As Single) As Boolean '这个function有很多写法,用布尔型应该是比较简便的一种
Dim squ As Single
squ = n * n
If squ Mod 10 = n Or squ Mod 100 = n Or squ Mod 1000 = n Then '验证是否满足n*n=xxn
automorphic = True
Else
automorphic = False
End If
End Function
某人抱怨朕不会写注释。。。好吧我承认。
蛮简单的题,但是我一开始用了一个循环来确定n的位数然后才用mod,没有想到or连接多个条件。以及有些不习惯布尔型的使用
出了个小插曲数据溢出,习惯用integer来定义变量/捂脸。更改了squ还是数据溢出。就是说这里只要n是整型n*n就会产生数据溢出
因为数据是先进行整型数n*n的计算并把结果存为整型然后尝试赋值给single的squ并尝试改变它的单精度为整型数据。(不同数据之间的相互赋值在c好像是不被允许的?)也就是说被赋值后的变量类型也会被强制赋值。
那么问题来了,为什么inputbox赋给的变量依旧可以保持原来的类型?