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

jxf_yx 2011-11-05 12:31:45
给出位数生成序列号,如需生成3位有0-Z组成的字符串,且能根据给定字符接着后位运行。
如:
第一步能生成这样的格式。
001
...
00Z
010
...
01Z
...
020
...
02Z
第二步
如果再给个其中一个字符020,下一个应该生成021.
=============================================
注意:不要循环生成,是调用一次,生成一个
...全文
93 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
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);
}
}

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧