VB常用算法(四)进制转化--Tag:进制转化算法1、算法说明1)十进制正整数m转换为R(2-16)进制的字符串。思路:将m不断除r取余数,直到商为0,将余数反序即得到结果。算法实现:PrivateFunctionTran(ByValmAsInteger,ByValrAsInteger)AsStringDimStrDtoRAsString,nAsIntegerDoWhilemon=mModrm=m\rIfn9ThenStrDtoR=Chr(65+n-10)&StrDtoRElseStrDtoR=n&StrDtoREndIfLoopTran=StrDtoREndFunction2)R(2-16)进制字符串转换为十进制正整数。思路:R进制数每位数字乘以权值之和即为十进制数。算法实现:PrivateFunctionTran(ByValsAsString,ByValrAsInteger)AsintegerDimnAsInteger,decAsIntegers=UCase(Trim(s))Fori%=1ToLen(s)IfMid(s,i,1)=AThenn=Asc(Mid(s,i,1))-Asc(A)+10Elsen=Val(Mid(s,i,1))EndIfdec=dec+n*r^(Len(s)-i)NextiTran=decEndFunction解题技巧进制转化的原理要清楚,同时编写代码时候要留意16进制中的A-F字符的处理。2、实战练习1)补充代码(2002秋二(9))本程序是把给定的二进制整数转换为八进制整数。PrivateSubCommand1_Click()DimaAsString,bAsString,cAsStringDimLAsInteger,mAsInteger,nAsIntegera=InputBox(请输入一个二进制数,输入框)(1)a=String(L,0)&a(2)Form=1Ton/3b=Mid(a,3*m-2,3)(3)NextmText1.Text=cEndSubPrivateFunctionzh(sAsString)AsStringDimiAsInteger,nAsInteger,pAsIntegerp=1Fori=2To0Step-1(4)p=p+1Nextizh=Str(n)EndFunction2)补充代码(2001春二(7))下面程序是把给定的16进制正整数转换为10进制数。OptionExplicitPrivateSubForm_Click()DimStAsInteger,DemAsLongSt=InputBox(输入一个十六进制数)Dem=Convert(St)PrintSt;=;DemEndSubPrivateFunctionConvert(SAsString)AsLongDimNAsInteger,IAsInteger,SubstringAsString*1DimPAslong,KAsLong,Asc1AsIntegerN=(1)P=16^NForI=1ToNP=P/16Substring=(2)SelectCaseSubstringCase0To9K=K+P*Val(Substring)Case(3)Asc1=Asc(Substring)-Asc(A)+10(4)EndSelectNextI(5)EndFunction