private const string initValue = "A0000001";
private static string cs = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static string AddOne(string str)
{
if (str == string.Empty)
{
return initValue;
}
Int64 num = StringToNumber(str);
return NumberToString(++num);
}
public static Int64 StringToNumber(string str)
{
int leg = str.Length;
double num = 0;
if (leg != 0)
{
for (int i = 0; i < leg; i++)
{
if (str[i] != '0')
{
num += cs.IndexOf(str[i]) * Math.Pow(36, leg - 1 - i);
}
}
}
return Convert.ToInt64(num);
}
public static string NumberToString(Int64 num)
{
string str = string.Empty;
while (num >= 36)
{
str = cs[(int)(num % 36)] + str;
num = num / 36;
}
return cs[(int)num] + str;
}
2019-8-30改进的版本
class Program {
static void Main(string[] args) {
string curr = "ZZZZZZ";
Console.WriteLine("原始值:" + curr);
Int64 num = Scale.ToInt64(curr);
Console.WriteLine("转成Int64:" + num);
Console.WriteLine("根据Int64转成进制:" + Scale.ToCurr(num));
Console.ReadLine();
}
}
public static class Scale {
///
/// 进制符号字符串
///
private static string scString = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ";
///
/// 字符集,可以根据编号索引拿到字符
///
private static char[] scArray = scString.ToCharArray();
///
/// 字符字典,可以根据字符拿到编号索引
///
private static Dictionary scDic = ToCharDic();
///
/// 根据字符串反馈进制数
///
public static int Len { get { return scString.Length; } }
///
/// 将字符串处理成字符字典
///
private static Dictionary ToCharDic() {
Dictionary dic = new Dictionary();
for (int i = 0; i < scArray.Length; i++) {
dic.Add(scArray[i], i);
}
return dic;
}
///
/// 根据传入的字符符号定义进制,字符符号不能重复,模拟十进制字符串为:0123456789
///
public static void SetScale(string scaleString) {
scString = scaleString;
scArray = scString.ToCharArray();
scDic = ToCharDic();
}
///
/// 将Int64转成当前进制字符串
///
public static string ToCurr(long num) {
string curr = "";
while (num >= Len) {
curr = scArray[num % Len] + curr;
num = num / Len;
}
curr = scArray[num] + curr;
return curr;
}
///
/// 将当前进制字符串转成Int64
///
public static long ToInt64(string curr) {
double num = 0;
for (int i = 0; i < curr.Length; i++) {
num += scDic[curr[i]] * Math.Pow(Len, curr.Length - 1 - i);
}
return Convert.ToInt64(num);
}
}
|