需求是這樣:
有一串序號:比如:KFP81204OM-0001
現在這串序號后面的0001就是一串33進制的.從1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,(i),j,k,l,m,n,(o),p,q,r,s,t,u,v,w,x,y,z
也就是0001,0002,0003,0004,0005...000A,000B...000H,000J,000K,...000N,000P,000Q...000Z
然后是0010就是到Z后加1
26個字母里要去掉I和O,
不知道描述的是否清楚,現在就想請求各位指點一下這個算法該怎么寫!
有一串序號:比如:KFP81204OM-0001
現在這串序號后面的0001就是一串33進制的.從1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,(i),j,k,l,m,n,(o),p,q,r,s,t,u,v,w,x,y,z
也就是0001,0002,0003,0004,0005...000A,000B...000H,000J,000K,...000N,000P,000Q...000Z
然后是0010就是到Z后加1
26個字母里要去掉I和O,
不知道描述的是否清楚,現在就想請求各位指點一下這個算法該怎么寫!
解决方案 »
- 100分急求!!在delphi中编程实现把access数据导入至sqlserver(在线等待)
- 请问大家一般怎么样实现撤消功能的代码?
- delphi视频教学 --五子棋游戏开发(第3讲),免费高速下载
- 请求高手帮忙解决
- 很菜的问题,送50分
- ######## 请速帮忙,DBGrid显示多表中字段的问题
- 为什么没人回答,大家讲点美德帮助我一下不行吗,分数不够可以再加?
- 如何减少软件占用的系统资源???
- 哪位大虾有关于DELPHI7的下载?
- 我在NT用中用timetostr()得到一个'上午 12:00:00’这是为何?如何改变?
- 调用bpl包中的子窗体
- Delphi中Pagecontrol的问题
KFP81204OM-0001
KFP81204OM-0002
KFP81204OM-0003
KFP81204OM-0004
KFP81204OM-0005
KFP81204OM-0006
...
KFP81204OM-000A
KFP81204OM-000B
...
KFP81204OM-000Z
KFP81204OM-0010
KFP81204OM-0011
KFP81204OM-0012
KFP81204OM-0013
KFP81204OM-0014
KFP81204OM-0015
KFP81204OM-0016
KFP81204OM-0018
KFP81204OM-0019
KFP81204OM-001A
KFP81204OM-001B
KFP81204OM-001C
KFP81204OM-001D
KFP81204OM-001E就是這樣..
等待高手...
function DecTo34(iDec, iDigit: Integer): String;
const
C : array[0..33] of Char = (
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B',
'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
begin
Result := '';
while iDec >= 34 do
begin
Result := C[iDec mod 34] + Result;
iDec := iDec div 34;
end;
Result := C[iDec] + Result;
Result := StringOfChar('0', iDigit - Length(Result)) + Result;
end;procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
begin
for i := 1 to 50 do
Memo1.Lines.Add('KFP81204OM-' + DecTo34(i, 4));
end;
先定义一个数组: newArray: Array of ['0','1',....'z']
然后用源如A(设为十进制,如果不是十进制,则此算法不可用.),进制33如B.
步骤1:让x:= A div B, y:=A mod B ,也即是分别取余,取整.
步骤2:让y值从newArray中得到查应的字符.如z.然后赋值给结果串。result:=z+result(注:加的位置不对错。)
步骤3:取将在让A:=X,
步骤4:循环步骤1-3.最后得到的结子果result即为所求。
const
Key: array[0..33] of char=('0','1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
var
FTmp,FTmp1:Integer;
begin
FTmp:=Value;
while FTmp>0 do
begin
FTmp1:=FTmp mod 34;
Result:=Key[FTmp1]+Result;
FTmp:=(FTmp-FTmp1) div 34;
end;
FTmp:=Digits-Length(Result);
if FTmp>0 then
Result:=StringOfChar('0',FTmp)+Result;
end;
急求10进制转33进制代码。
就是我想在EXCLE中使用宏建一个自定义函数“tenTO33”
33进制规则是:0、1、2、3、4、5、6、7、8、9、A、C、D、E、F、G、H、J、K、L、M、N、P、Q、R、S、T、V、W、X、Y、Z、10 字母:I、O、U不用,其余正常流水。下面是代码,但会出现重码现象(例如:十进制中66和2178算出的33进制结果都是20),请大家看看哪里出问题了,非常感谢!!!Function tenTo33(x As Long) As String
Dim i As Integer
Dim tmp As Long
tmp = x
Dim xStr(0 To 32) As String
For i = 0 To 9
xStr(i) = i
Next i
For i = 10 To 17
xStr(i) = Chr(i + 55)
Next i
For i = 18 To 22
xStr(i) = Chr(i + 56)
Next i
For i = 23 To 27
xStr(i) = Chr(i + 57)
Next i
For i = 28 To 32
xStr(i) = Chr(i + 58)
Next i
For i = 10 To 1 Step -1
If Int(tmp / 33 ^ i) > 0 Then
tenTo33 = tenTo33 & xStr(Int(tmp / 33 ^ i))
tmp = tmp - Int(tmp / 33 ^ i) * 33 ^ i
End If
Next i
tenTo33 = tenTo33 & xStr(tmp)
End Function