有这样一个题:
 将一个数的最后一位数放在第一位那么产生的新数为原数的二倍,那么怎么求这个数??
这个数 最少也有18位 ,
这是我用笔推出来的!
我用循环来做的可是不能实现
怎么办?

解决方案 »

  1.   

    Private Sub Command1_Click()
      Dim i As Long
      Dim num As String
      
      
      i = 10
      Do While True
       i = i + 1
       num = Format(i, "0")
       num = Right(num, 1) + Mid(num, 1, Len(num) - 2) + Left(num, 1)
       If Val(num) = 2 * i Then
         Exit Do
       End If
      Loop
      MsgBox Str(i)
    End Sub
      

  2.   

    to yefanqiu(叶帆):
    楼主说至少要算到18位,呵呵呵而你的循环质量也太低了吧,起码要判断一下 最后一位数要大于第一位数呀才进行比较嘛
      

  3.   

    优化的程序,速度快了不止一倍。  Dim stri As String
      Dim n As Long, t As Long
      Dim m As Long
      Dim flag As Boolean  Do
        DoEvents
        t = t + 2
        m = Val(Mid$(Str$(t), 1, 1))
        For n = m To 9
        labtest.Caption = t * 10 + n
          If Val(Str$(n) + Str$(t)) = (t * 10 + n) * 2 Then
            Exit Do
          End If
        Next n
      Loop
      labis.Caption = Val(n)labis , labtest是两个Label控件,分别显示这个符合条件的数和当前测试的数。因为进行位置变换的数是原数的一倍,那么原数的十位一定要被2整除。所以程序中有一句: t=t+2 ,而不是t=t+1。t是原数的最高位到十位。t*10+n就是要测试的数。m是t的最高位。要满足条件,最低位一定要大于最高位,所以最低位n=m to 9
      

  4.   

    我原先的算发错了,我把首尾交换了,如果位数为18位左右,Val函数溢出,long类型和货币类型都溢出。
    只能自己定义数据结构计算了。用一般方法,我估计很难很快算出来。
    我再想想别的方法