大概要求:可以顺算和逆算.
顺算后,用类似a=0,b=1,c=2,d=3,e=4,f=5,g=6,h=7,i=8,j=9,k=10=a,l=11=b,m=12=c,n=13=d,o=14=e,p=15=f
达到p后,变进化到aa,ab,ac....ap..这是2位的,再往下,是4位的,6位,8位这样递增.顺算的概念是比如单个字母a,16进制为61,而算出来后是gc,小写b则是62,算出来是gd.
输入gd的时候,可以逆算回b
同时的,输入的可能是中文字,
以下是比较正确的正解
a=61=gc
b=62=gd
.=2E=46=cp
/=2F=47=da
..=2E2E=11822=dcdd
窝=CED1=52945=ncng
我=CED2=52946=ncnh
斡=CED3=52947=ncni
卧=CED4=52948=ncni
握=CED5=52949=ncnk
沃=CED6=52950=ncnl
巫=CED7=52951=ncnm
呜=CED8=52952=ncnn
钨=CED9=52953=ncno
乌=CEDA=52954=ncnp
污=CEDB=52955=ncna污.=CEDB2E=13556526=nhofdj黯=F7F6=63478=aaaaaa
鼢=F7F7=63479=aaabaa痫铐=F0EFEEED=4042256109=aaaaaaaa
痫铑=F0EFEEEE=4042256110=aaaaaaab
珂邋=E7E6E5E5=3890669029=aaaaaaabaa
顺算后,用类似a=0,b=1,c=2,d=3,e=4,f=5,g=6,h=7,i=8,j=9,k=10=a,l=11=b,m=12=c,n=13=d,o=14=e,p=15=f
达到p后,变进化到aa,ab,ac....ap..这是2位的,再往下,是4位的,6位,8位这样递增.顺算的概念是比如单个字母a,16进制为61,而算出来后是gc,小写b则是62,算出来是gd.
输入gd的时候,可以逆算回b
同时的,输入的可能是中文字,
以下是比较正确的正解
a=61=gc
b=62=gd
.=2E=46=cp
/=2F=47=da
..=2E2E=11822=dcdd
窝=CED1=52945=ncng
我=CED2=52946=ncnh
斡=CED3=52947=ncni
卧=CED4=52948=ncni
握=CED5=52949=ncnk
沃=CED6=52950=ncnl
巫=CED7=52951=ncnm
呜=CED8=52952=ncnn
钨=CED9=52953=ncno
乌=CEDA=52954=ncnp
污=CEDB=52955=ncna污.=CEDB2E=13556526=nhofdj黯=F7F6=63478=aaaaaa
鼢=F7F7=63479=aaabaa痫铐=F0EFEEED=4042256109=aaaaaaaa
痫铑=F0EFEEEE=4042256110=aaaaaaab
珂邋=E7E6E5E5=3890669029=aaaaaaabaa
解决方案 »
- LoadBitmapBynum运用中的错误
- ---------------奇怪的得分,我今天的专家分是13333分,特此放分,欢迎大家来顶
- 急!请问如何精确计算除法?
- 如何使用热键来响应窗体上的功能键
- 关于日期的问题请帮忙看看!!!!
- 请教各位:在VB中调用EXCEL后,可否还可以进行查询,查询后单元格的内容是否会不再规则呢?在线等候.谢谢
- 关于data控件使用的问题
- 為什么ActiveReports在2000下面不能注冊呢?還有其它注冊方法嗎,謝謝了!
- 一个关于addnew,update的问题
- 我的机子win2000+sp2怎么了,为什么从vb中copy过来的代码,粘贴到了ie中中文总是乱码
- 图片
- 如何让 TreeView 一启动 , 就自动显示 节点前面的 "+"
b=62=gd
应该表示为
a=61=97=gc
b=62=98=gd 61是16进制,97是10进制.珂邋=E7E6E5E5=3890669029=aaaaaaabaa
E7E6E5E5是16进制,转到10进制时为3890669029,顺算后为aaaaaaabaa
“a=61=97=gc”:g大概是因为a的Hex第一位是6;可是C呢?好象跟6、1、9、7、61、97都扯不上关系吧!
“珂邋=E7E6E5E5=3890669029=aaaaaaabaa”, 这个更是一头雾水~~~~~~
你的“编码规则”看样子也是一种“十六进制”,“珂邋=E7E6E5E5”,顺算后也应该是8个字符的编码呀,怎么变成10个了?再说,你的“aaaaaaabaa”和“3890669029”也对不上号吧!
“a=61=97=gc”:g大概是因为a的Hex第一位是6;可是C呢?好象跟6、1、9、7、61、97都扯不上关系吧!
“珂邋=E7E6E5E5=3890669029=aaaaaaabaa”, 这个更是一头雾水~~~~~~
你的“编码规则”看样子也是一种“十六进制”,“珂邋=E7E6E5E5”,顺算后也应该是8个字符的编码呀,怎么变成10个了?再说,你的“aaaaaaabaa”和“3890669029”也对不上号吧!
a=0,b=1,c=2,d=3,e=4,f=5,g=6,h=7,i=8,j=9,k=10=a,l=11=b,m=12=c,n=13=d,o=14=e,p=15=f
g=6,c=2,拼起来减1=61刚好等于gc要理解“珂邋=E7E6E5E5=3890669029=aaaaaaabaa”, 这个更是一头雾水~~~~~~
要理解这个的话,那得先理解另一个.
污=CEDB=52955=ncna
污.=CEDB2E=13556526=nhofdj
单个中文字的时候,会变成4位的ncna,但多一个点的时候,会变成6位,好像是重新计算过的.
所以它们的关系,应该是补位....呵.这就是加密算法嘛..韩国人想的...我现在也要在软件里加一些比较好的加密算法,所以想到它这个.好像还蛮保密的.
10进制和16进制互转,用加减乘除法就可以算,但最大好像只能算到20亿左右.再大就溢出了.比如把数字1换成a,2=b,3=c.....26=z,27=aa...
如果其太过复杂的话...那就来个简单的加密好了.比如已经准备一段数字,8080821234341234233148293.如何把这段数字转换成26进制?或者把26进制的字母转成普通数字?
用简单的加减乘除法,可以对进制进行转换,但超过20亿的数字后会有问题..
26进制的话就是用纯大写或小写代替数字,
1=a
2=b
3=c
4=d
5=e
6=f
7=g
8=h
9=i
....
26=z
27=aa
28=ab
29=ac
.....
17576=aaa
17577=aab
逢26进1,数字消失变成abcdefghij..26个字母代替.而且要支持超大的数字互转..
用下面给出的函数取模
Sub Main()
Debug.Print Encode("8080821234341234233148293")
End SubFunction Encode(ByVal s As String) As String
Dim vDivident As Variant
Dim vDivisor As Variant
Dim vRemainder As Variant
Dim vQuotient As Variant
Dim sResult As String vDivident = CDec(s)
vDivisor = CDec(26)
While vDivident > 0
vQuotient = BigDiv(vDivident, vDivisor, vRemainder)
sResult = <将余数vRemainder转换成编码格式> & sResult
vDivident = vQuotient
Wend
Encode = sResult
End FunctionFunction BigDiv(ByVal Divident As Variant, ByVal Divisor As Variant, ByRef Remainder As Variant) As Variant
BigDiv = CDec(Int(CDec(Divident) / CDec(Divisor)))
Remainder = CDec(Divident) - BigDiv * CDec(Divisor)
End Function
用下面给出的函数取模 VB codeSub Main()
Debug.Print Encode("8080821234341234233148293")
End SubFunction Encode(ByVal s As String) As String
Dim vDivident As long
Dim vDivisor As long
Dim sResult As String vDivisor = 26
While s <>""
vDivident = left(s,9)
s=iif(len(s)>9,mid(s,10),"")
do
sResult= (vDivident mod vDivisor)+97 & sResult
vDivident =vDivident\vDivisor
loop While vDivident<>0
Encode= Encode & sResult & ","
sResult=""
Wend
End Function套用12L的代码,先谢谢
LZ在10L的说明还是有问题:0=?,26进制的话26应该进位了,不可能26=z
上面代码我按a=0,b=1..........z=25做的,还有因为位数不固定所以每组中间加了分隔符","
LZ根据自己需要改吧
Dim vDivident As Long
Dim vDivisor As Long
Dim sResult As String vDivisor = 26
While s <> ""
vDivident = Left(s, 9)
s = IIf(Len(s) > 9, Mid(s, 10), "")
Do
sResult = Chr((vDivident Mod vDivisor) + 97) & sResult
vDivident = vDivident \ vDivisor
Loop While vDivident <> 0
ec = ec & sResult & ","
sResult = ""
Wend
End Functionec("8080821234341234233148293")=
cqailtr,bknzukt,gxdgf,
嘻,逆算怎么写?
一切为了加分!
Function ce(ByVal s As String) As String
Dim vDivident As String
Dim vDivisor As Long
Dim sResult As Long
Dim i As Long, j As Long
While s <> ""
i = InStr(1, s, ",")
vDivident = Left(s, i - 1)
s = IIf(Len(s) > 1, Mid(s, i + 1), "")
j = 0
Do
vDivisor = 26 ^ j
sResult = (Asc(Right(vDivident, 1)) - 97) * vDivisor + sResult
vDivident = Left(vDivident, Len(vDivident) - 1)
j = j + 1
Loop While vDivident <> ""
ce = ce & sResult
sResult = 0
Wend
End Function
无效的过程调用或参数..
你在进入循环前设个断点,先把 S 的值打出来。
然后,在提示出错时,点“调试”,再在 Debug 窗口中把 s 和 i 的值打出来看一下,就好找原因了。多数情况下是 s 不为空,但不包含 , 。