您的位置:首页 > 其它

用"指定字符组成的任意进制"转换生成不带4的卡号

2007-07-09 16:51 363 查看
单位让生成一批卡,但不能带4.
  如想想生成1000张卡,想到的解决方法有两个:
  方法一:
    用一个while循环,先生成10进制字串,如果字串中包含4,跳过,然后继续. 直到生成1000张卡为止,跳出循环.
  方法二:
    用一个for循环,把每个数字转换成不包含4的进制数,完成

  看来,方法二要感觉要简单点. 且不用浪费空循环了,如(400-499)这一百次.
  要使用方法二,我们先要实现这个任意字符组成的任意进制的转换类.下面是我的实现:

public class BaseConverter


使用举例如下:

//十进制转换
BaseConverter bc = new BaseConverter("0123456789".ToCharArray());
Console.WriteLine(bc.ToNumber("456789"));
Console.WriteLine(bc.ToString(756217));

//没有4的九进制转换
bc = new BaseConverter("012356789".ToCharArray());
long val = bc.ToNumber("856789");
Console.WriteLine(val);
Console.WriteLine(bc.ToString(val));

//查看当前九进制下,两个号段之间有多少可用号
long v1 = bc.ToNumber("018512");
long v2 = bc.ToNumber("999999");
Console.WriteLine("还能有{0}张卡", v2 - v1);

//十六进制转换
BaseConverter bcchs = new BaseConverter("0123456789abcdef".ToCharArray());
Console.WriteLine(val);
Console.WriteLine(bcchs.ToString(0xefefef));

//下面看一下,都生成卡号从 3000000 开始的号,生成2000000 张


由于中间有 4000000 的循环,所以还是进制转换方法优. 嘿嘿

PS:用这个方法,还可以用来加密哟:

BaseConverter bcchs = new BaseConverter("ksdfhjiy&^$#@)(".ToCharArray());
Console.WriteLine(bcchs.ToString(895621));

//你猜一下,会是什么?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: