当前位置:编程学习 > 网站相关 >>

小小算法题,有个有个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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,