• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

求一进位算法或序列号生成算法

jxf_yx 2011-11-05 12:31:45
给出位数生成序列号,如需生成3位有0-Z组成的字符串,且能根据给定字符接着后位运行。
如:
第一步能生成这样的格式。
001
...
00Z
010
...
01Z
...
020
...
02Z
第二步
如果再给个其中一个字符020,下一个应该生成021.
=============================================
注意:不要循环生成,是调用一次,生成一个
...全文
55 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jxf_yx 2011-11-05
字符有0-9,和字母A-Z组成,且字母的有些字符能过滤,比如B,O忽略
回复
PaulyJiang 2011-11-05
这个是36进制么?还是62的?他们的ASIC II码。。。
http://wenku.baidu.com/view/795dfe24ccbff121dd3683fe.html
回复
jxf_yx 2011-11-05
谢谢,虽然我自己也写出来了,我是用字典来做的。
回复
黄亮 2011-11-05
如果需要过滤字母_chars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"中剔除,且将36改为这个字符串的长度
回复
黄亮 2011-11-05
测试代码
var c= new Class2() {Length = 3};
for (int i = 0; i < 100; i++)
{
Console.WriteLine(c.GetNext());
}
Console.WriteLine(c.GetNext("A3U"));
回复
黄亮 2011-11-05
  public class Class2
{
private static readonly char[] _chars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
public int Length { get; set; }

private long _current;

public string GetNext()
{
return GetNext(_current);
}

public string GetNext(string current)
{
int k = 0;
foreach (char c in current.ToUpper())
{
int j;
if(c<='9')
j = (byte) c - (byte) '0';
else
{
j = (byte) c - (byte) 'A' + 10;
}
k = k*36 + j;
}
return GetNext(k);
}

public string GetNext(long current)
{
_current = current+1;

var c = new char[Length];
var p = _current;
for (int i = Length - 1; i >= 0; i--)
{
c[i] = _chars[p%36];
p = p/36;
}


return new string(c);
}
}
回复
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2011-11-05 12:31
社区公告

让您成为最强悍的C#开发者