h = 1000
For i = 1 To 10000
x = Mid(Str(i), Len(Str(i)), 1)
y = Mid(Str(i), 1, Len(Str(i)) - 1)
If Val(x & y) = 2 * Val(y & x) Then
Exit For
End If
Next i
If i > h Then
MsgBox h & "以内无此数"
Else
MsgBox i
End If
For i = 1 To 10000
x = Mid(Str(i), Len(Str(i)), 1)
y = Mid(Str(i), 1, Len(Str(i)) - 1)
If Val(x & y) = 2 * Val(y & x) Then
Exit For
End If
Next i
If i > h Then
MsgBox h & "以内无此数"
Else
MsgBox i
End If
Private Sub Command1_Click()
Dim StrInt As String, temp As String
Dim j As Long, k As Long
j = 11
Do While B
DoEvents
StrInt = CStr(j)
Label1.Caption = StrInt
temp = Right(StrInt , 1) & Left(StrInt , Len(StrInt ) - 1)
k = CLng(temp)
Label2.Caption = k
If (k / j) = 2 Then
MsgBox j
Exit Do
End If
j = j + 1
Loop
End SubPrivate Sub Command2_Click()
B = False
End SubPrivate Sub Form_Load()
B = True
End Sub
__
AX 假设A的长度为n X就是最末位
则此数=10*A+X
新数=10^n(10的n次)*X+A
方程
(10^n)*X+A=2*(10*A+X)
但是不是所有的n都是有解的,因为要满足A是n位,并且X是一位数
整理后得到
19A=99...998X
所以99...9998必须被19整除 而99999999999999998/19=5263157894736842是整数
所以解出
5263157894736842*X=A
X取2 原数为105263157894736842 新数为 210526315789473684 符合
X取3 原数为157894736842105263 新数为 315789473684210526 符合
X取4 原数为210526315789473684 新数为 421052631578947368 符合
...
这样有很多组都可以满足,只要长度符合就可以了 类似的,可能有很多999999..98能被19整除,这样就会有更多解
不过还是阿甘的算法好多了,用A=(10^n-2)X/19,
看来我还得加油加油再加油啊
Private Sub Command1_Click()
Dim i
i = 21
Do Until 2 * i = Right(i, 1) & Mid(i, 1, Len(i) - 1)
If Right(i, 1) > Mid(i, 1, 1) Then
i = i + 1
DoEvents
Else
i = i + 1
End If
Text1.Text = i
Loop
MsgBox i
End Sub
设原数为Y=AX,其中A为N位数,X为一位数,则Y=A*10+X
移位后为Z=XA,则Z=X*10^N+A
因为Z=2*Y,则X*10^N+A=2*(A*10+X)
换算后得:19A=X*10^N-2*X
计算公式为:A=X*(10^N-2)/19
1、因为19是质数,所以(10^N-2)/19必为整形数
2、因为X为一位数,用枚举法1-9求出A,若A为N位整形数就是所求结果
按上述算法,计算一个N位数最多只需9*N次或更少,因为第一个条件已经限定必须为整数,即计算一个100位数只需运算900次或更少。
迟点我拿出全部程序
VC就没问题了Private Sub Command1_Click()
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
MsgBox "Number=" & A & X
End If
Next X
End If
Next N
End Sub
是原數的兩倍。 copy wuwutao(濤哥)的貼:)设原数为Y=AX,其中A为一位数,X为N位数,则Y=A*10^N+X
移位后为Z=XA,则Z=X*10+A
因为Z=2*Y,则X*10+A=2*(A*10^N+X)
换算后得:8X=(2*10^N-1)A
if A<>8 then
if A=2 or A=4 then
前後約分
endif
前面恆為偶<>後為恆為奇
命題得證=true
else 'a=8
原數Y=8******(不可能出現一個數是其兩倍)
命題得證=true
end if按上述算法,因為0和>=5的數不能出現在首位。计算一个N位数最多只需4*N次或更少,因为第一个条件已经限定必须为整数,即计算一个100位数只需运算400次或更少。
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