用"指定字符组成的任意进制"转换生成不带4的卡号
2007-07-09 16:51
363 查看
单位让生成一批卡,但不能带4.
如想想生成1000张卡,想到的解决方法有两个:
方法一:
用一个while循环,先生成10进制字串,如果字串中包含4,跳过,然后继续. 直到生成1000张卡为止,跳出循环.
方法二:
用一个for循环,把每个数字转换成不包含4的进制数,完成
看来,方法二要感觉要简单点. 且不用浪费空循环了,如(400-499)这一百次.
要使用方法二,我们先要实现这个任意字符组成的任意进制的转换类.下面是我的实现:
使用举例如下:
由于中间有 4000000 的循环,所以还是进制转换方法优. 嘿嘿
PS:用这个方法,还可以用来加密哟:
如想想生成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)); //你猜一下,会是什么?
相关文章推荐
- php 64进制生成和转换类,也可以任意进制
- 将十进制数转换为指定进制的数 不使用字符操作和递归实现
- Java随机生成长度不少于6的指定长度的密码,且这个字符串必须包含大小写字母、数字和特殊字符,四种的任意三种
- 将任意进制字符串转换为指定进制输出
- 通过一个函数或sql语句,随机生成任意6个字母组成的字符
- Java生成随机数工具类,进制之间的转换工具类,获取指定时间,时间格式转换工具类
- 通过一个函数或sql语句,随机生成任意6个字母组成的字符
- Java生成随机数工具类,进制之间的转换工具类,获取指定时间,时间格式转换工具类
- 通过一个函数或sql语句,随机生成任意6个字母组成的字符
- Java随机密码生成器,Java随机生成长度不少于6的指定长度的密码,且这个字符串必须包含大小写字母、数字和特殊字符,四种的任意三种
- 设计算法把一个十进制的整数转换成二至九进制之间的任意进制输出
- C语言之任意进制的转换
- 任意整数转换为任意进制
- 十进制转换为任意进制及操作符重载
- C#生成指定长度指定字符的随机数
- 通用进制转换工具,可实现进制之间的任意转换
- 十进制转换任意进制
- C++十进制转换为任意进制
- 整型和字符数组之间的转换(略带进制的转化)
- POJ 1220-NUMBER BASE CONVERSION 任意进制数转换