各位看官没有看到他们的答案有的是错的吗,要处理,你应该要想到这一点
因为自然数没有前导0,所以0不会是尾数,也不会是第一个数。
尾数移动到第一位后数要变大一倍,因此最后一位必须是第一位的两倍或两倍加一,所以第一位必须是1-4这四个数之一,而尾数必须为第一位的两倍或两倍加一,而且每一位都是前一位的两倍或两倍加一,不可能是更大的数。所以,这个算法以程序实现就是这样的。
Dim x(1100)
Dim i As Long, j As Long, k As Long
Dim s As Long
For i = 2 To 1000
For x(i) = 2 To 9
k = 0
For j = i - 1 To 1 Step -1
x(j) = x(j + 1) * 2 Mod 10 + k
If x(j + 1) * 2 >= 10 Then
k = 1
Else
k = 0
End If
Next
If x(i) = 2 * x(1) + k Then
For s = 1 To i
Me.Tag = Me.Tag & x(s)
Next
MsgBox Me.Tag
Me.Tag = ""
End If
Next
Next
第一个结果:105263157894736842
速度很快,只要你愿意,可算出更长的来。
修正:
Dim A As Double
Dim X As Integer
Dim N As Integer
Dim maxN As Integer
Dim dC As Double
Dim nC As Long
maxN = 20 '假设最多算至20位数
For N = 1 To maxN Step 1
dC = (10 ^ N - 2) / 19
nC = CLng(dC)
If dC - nC = 0 Then
For X = 2 To 9 Step 1
A = X * nC
'If Len(A) = N Then
'此处不应该判断长度,直接判断是否符合
'If 2*(A*10+X)=x*10^N+A then
MsgBox "Number=" & A & X
End If
Next X
End If
Next N