庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>安全技术>软件破解>算法研究>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

*出租销售系统 5.6--算法分析 下

 作者:本站收集   日期:2005-5-26
字号选择〖 〗/ 双击滚屏 单击停止   

'*******************************************************
Do
nlen = Len(astr1) '得出10进制的长度
p = Int((nlen - 1) / 4) '得出数字占数组的个数(减去1代表数组单元的下标),每4位数占一个数组单元
i = 0
k = 1
Do
  alen = Len(astr1)
    If alen <= 4 Then
      k = 2
      x(i) = astr1
    Else
      x(i) = Right(astr1, 4)             '每次从低位取4位
      astr1 = Mid(astr1, 1, alen - 4)
    End If
    i = i + 1
Loop While k = 1          '完成数据向数组的装入,每个单元为字符串,是从低位向高位的顺序
strnext = ""
strtmp = ""
modtmp = ""
r = 1     '前导去0标志
'***************************************************
For z = p To 0 Step -1      '从最后一位,也是10进制数的最高位开始
  modtmp1 = CStr(CLng(modtmp + x(z)) Mod 16) '模作为与下一个数组单元相接合,再求模,直到这后的模
  strtmp = CStr(Int(CLng(modtmp + x(z)) / 16))

  If Len(strtmp) < 4 And r <> 1 Then '补0也是为了下次大循环的运算,如果是第一个值就不用被0了
     For i = 1 To 4 - Len(strtmp)
     strtmp = "0" + strtmp
     Next i
  End If

  strnext = strnext + strtmp  '得到除以16的商,准备用下一次大循环的运算初始值
  modtmp = modtmp1
  r = 2
Next z
'***************************************************

lastmod = Hex(Int(modtmp)) + lastmod '其实这就是16进制数了,不用再反向了
astr1 = strnext
i = 1
Do     '前导去0循环
nlen = Len(astr1)
If Left(astr1, 1) = "0" Then
  astr1 = Right(astr1, nlen - 1)
Else
  Exit Do
End If
i = i + 1
Loop While i <= Len(astr1)


If Len(astr1) <= 2 Then    '因为前已经加成4个0了,对循环退出的判断
   If Len(astr1) = 0 Then  '防止到下面来个CInt(astr1)类型不符
      Exit Do
   End If
   If CInt(astr1) < 16 Then
     Exit Do
   End If
End If
Loop
'*****************************************************
If Len(astr1) = 0 Then
laststr = lastmod
Else
laststr = Hex(CInt(astr1)) + lastmod
End If

oct2hex = laststr
Case 2
oct2hex = "你的输入非法!"
Case 3
If Option1.value = True Then
  oct2hex = "16 进制实时显示"
  Else
  oct2hex = "10 进制实时显示"
End If
End Select


End Function


Function bigadd(add1, add2)
'大数相加函数,参数定义add1,add2均为10进制数的字符串表示形式,限定为28位长度。
'返回值也是10进制的字符串形式。当然还有一个错误返回值是"inputerror"

'每一个0代表4位数,第一个0代表1-4位,第2个0代表5-8位,第3个0代表9-12们,类推,第7个0代表25-28位(这是从最低位开始数哟)
astr1 = add1
astr2 = add2
e = 1 '输入操作数正确标志
For i = 1 To Len(astr1)   '检查第一输入的合法性
SUMSUM = Asc(Mid(astr1, i, 1))
If SUMSUM < 48 Or SUMSUM > 57 Then
e = 2
End If
Next i
For i = 1 To Len(astr2)   '检查第二个输入的合法性
SUMSUM = Asc(Mid(astr2, i, 1))
If SUMSUM < 48 Or SUMSUM > 57 Then
e = 2
End If
Next i
If Len(astr1) = 0 Or Len(astr2) = 0 Then '其中任意一个操作数不能为空
e = 2
End If

If e = 1 Then
A = Array(0, 0, 0, 0, 0, 0, 0)
i = 0
k = 1
Do
alen = Len(astr1)
If alen <= 4 Then
  k = 2
  A(i) = CLng(astr1)
Else
  A(i) = CLng(Right(astr1, 4))              '每次从低位取4位
  astr1 = Mid(astr1, 1, alen - 4)
End If
i = i + 1
Loop While k = 1
'到这里完成将10进制数第4位放入数组a
wa = i  '这里代表a数组里有几个数

B = Array(0, 0, 0, 0, 0, 0, 0)
i = 0
k = 1
Do
alen = Len(astr2)
If alen <= 4 Then
  k = 2
  B(i) = CLng(astr2)
Else
  B(i) = CLng(Right(astr2, 4))              '每次取4位
  astr2 = Mid(astr2, 1, alen - 4)
End If
i = i + 1
Loop While k = 1
'到这里完成将10进制数第4位放入数组b
wb = i  '这里代表b数组里有几个数

C = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)  '定义最终结果数组,每一个0代表4位数
'---------------------------------相加代码段--------------------------------
If wa > wb Then
  w = wa - 1
Else
  w = wb - 1
End If
i = 0
tmp2 = 0
Do While i <= w           '以数组最多的数决定循环次数
tmp = A(i) + B(i) + tmp2
C(i) = (tmp Mod 10000)          '只留4位
tmp2 = Int(tmp / 10000)       '商自动进入下一位
i = i + 1
If i = 7 Then
  Exit Do
End If
Loop
C(i) = tmp2         '最后一个进位值
k = 1
For i = 13 To 0 Step -1
If C(i) <> 0 Or k <> 1 Then
   ttmp = CStr(C(i))
   If Len(ttmp) < 4 And k <> 1 Then  '当出现某个数组中的数为0890的情况,如果不补0,就会出错了。当然也要考第一个数防止出现数字最前面出现多余的0的情况
     For J = 1 To 4 - Len(ttmp)
       ttmp = "0" + ttmp
     Next
   End If
   laststr3 = laststr3 + ttmp
   k = 2
End If
Next i
If k = 1 Then   '两个0两相加,就可以一次都不经过
bigadd = "0"
Else
bigadd = laststr3
End If
Else
bigadd = "inputerror"   '说明输入错误了
End If
'---------------------------------相加代码段结束--------------------------------
End Function
Function bigmul(mul1, mul2)
'大数相乘函数,参数定义mul1,mul2均为10进制数的字符串表示形式,限定为28位长度。
'返回值也是10进制的字符串形式。当然还有一个错误返回值是"inputerror"

'每一个0代表4位数,第一个0代表1-4位,第2个0代表5-8位,第3个0代表9-12们,类推,第7个0代表25-28位(这是从最低位开始数哟)
astr1 = mul1
astr2 = mul2
e = 1 '输入操作数正确标志
For i = 1 To Len(astr1)   '检查第一输入的合法性
SUMSUM = Asc(Mid(astr1, i, 1))
If SUMSUM < 48 Or SUMSUM > 57 Then
e = 2
End If
Next i
For i = 1 To Len(astr2)   '检查第二个输入的合法性
SUMSUM = Asc(Mid(astr2, i, 1))
If SUMSUM < 48 Or SUMSUM > 57 Then
e = 2
End If
Next i
If Len(astr1) = 0 Or Len(astr2) = 0 Then '其中任意一个操作数不能为空
e = 2
End If

If e = 1 Then
A = Array(0, 0, 0, 0, 0, 0, 0)
i = 0
k = 1
Do
alen = Len(astr1)
If alen <= 4 Then
  k = 2
  A(i) = CLng(astr1)
Else
  A(i) = CLng(Right(astr1, 4))              '每次从低位取4位
  astr1 = Mid(astr1, 1, alen - 4)
End If
i = i + 1
Loop While k = 1
'到这里完成将10进制数第4位放入数组a
wa = i  '这里代表a数组里有几个数

B = Array(0, 0, 0, 0, 0, 0, 0)
i = 0
k = 1
Do
alen = Len(astr2)
If alen <= 4 Then
  k = 2
  B(i) = CLng(astr2)
Else
  B(i) = CLng(Right(astr2, 4))              '每次取4位
  astr2 = Mid(astr2, 1, alen - 4)
End If
i = i + 1
Loop While k = 1
'到这里完成将10进制数第4位放入数组b
wb = i  '这里代表b数组里有几个数

C = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)  '定义最终结果数组,每一个0代表4位数
'---------------------------------相乘代码段开始(不考虑负数情况)--------------------------------
For i = 0 To 13
C(i) = 0
Next i

For i = 0 To 6
tmp2 = 0
For J = 0 To 6
  sumtmp = A(J) * B(i) + tmp2 + C(i + J)
  C(i + J) = (sumtmp Mod 10000)
  tmp2 = Int(sumtmp / 10000)
Next J
C(i + J) = tmp2
Next i
k = 1
For i = 13 To 0 Step -1
If C(i) <> 0 Or k <> 1 Then
   ttmp = CStr(C(i))
   If Len(ttmp) < 4 And k <> 1 Then  '当出现某个数组中的数为0890的情况,如果不补0,就会出错了。当然也要考第一个数防止出现数字最前面出现多余的0的情况
     For J = 1 To 4 - Len(ttmp)
       ttmp = "0" + ttmp
     Next
   End If
   laststr4 = laststr4 + ttmp
   k = 2
End If
Next i
If k = 1 Then      'k=1 说明一次都没经过,结果就为0
bigmul = "0"
Else
bigmul = laststr4
End If
Else
bigmul = "inputerror"
End If

End Function

Function bigdiv(mul1, mul2)

'大数相除函数,参数定义mul1,mul2均为10进制数的字符串表示形式
'这里的被除数只能在long的范围内

astr1 = mul1
nlen = Len(astr1)
astr2 = mul2
lasturn = ""
laststr = ""   '最后的商
k = 1
For i = 1 To nlen
  strtmp = lasturn + Mid(astr1, i, 1)
  sumtmp = CLng(strtmp)
  If sumtmp < CLng(astr2) Then
      lasturn = CStr(strtmp)
      If k = 2 Then laststr = laststr & "0"
  Else
      laststr = laststr & CStr(Int(sumtmp / CLng(astr2)))
      lasturn = CStr(sumtmp Mod CLng(astr2))
      k = 2
  End If
Next
bigdiv = laststr
'lasturn就是模了
End Function
上一篇:黄河英语通 2.25注册算法分析    下一篇:*出租销售系统 5.6--算法分析 上  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-5-26
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿