小小算法题,有个有个BUG,大家有兴趣的写写看。
问题:对于任意一个正整数 N,按以下操作把它转化为一个单一数字(大于 0 小于 10的数):把 N 的各位上数字相加,若得到的结果不是一个单一数字,就把结果的各位上的数字相加,
若得到的结果还不是一个一位数,就还把结果的各位上的数字相加,
……
直到结果为一个单一数字为止。
如:2345
2+3+4+5=14
1+4=5 结果就为 5。
请写出一个方法,当传入任意一个正整数时,返回它按以上操作所得到的单一数字
。
稍后贴出带有BUG的递归算法,谁给解释解释,一直不知为什么Len的算易做图继承上一次的程度。
--------------------编程问答-------------------- Msgbox NtoN(123456789)
Function NtoN(Byval I As Long) As Long
Dim M As Long
Dim N As Long
Dim L As Integer
L = Len(I)
If L > 1 Then
For o = 1 To L
M = M + Clng(Mid(I,o,1))
Next
N = NtoN(M)
End If
NtoN = N
End Function
--------------------------
L = Len(I)
解释这一句 --------------------编程问答-------------------- --------------------编程问答-------------------- Len(I)改一下,改成Len(cstr(I)),应该就没问题了~ --------------------编程问答-------------------- Function NtoN(Byval I As Long) As Long
Dim M As Long
Dim N As Long
Dim L As Integer
L = Len(Cstr(I))
If L > 1 Then
For o = 1 To L
M = M + Clng(Mid(I,o,1))
Next
N = NtoN(M)
Else
N = I
End If
NtoN = N
End Function
OK --------------------编程问答-------------------- 新手见解:I为Long型数值,用Len返回的一直都是Long的字符长度,如果当M变成一个Integer时候,再传入NtoN(M)函数中,是否直接转换成Long型呢,(IBM的底层是JAVA 按照JAVA的方法调用,应该是直接变成Long) 由此 Len(I) 还是返回的Long整型的字符长度。
说错的地方,不要拍砖。可以帮我修补修补。 --------------------编程问答-------------------- 文思创新的兄弟名字很明啊
补充:企业软件 , Lotus