zoukankan      html  css  js  c++  java
  • C#实现整型数据字任意编码任意进制的转换和逆转换

    实现如下:

    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
     
    namespace ConsoleApplication1 

     
        public class Number 
        { 
            public string Characters 
            { 
                get; 
                set; 
            } 
     
            public int Length 
            { 
                get 
                { 
                    if (Characters != null) 
                        return Characters.Length; 
                    else 
                        return 0; 
                } 
     
            } 
     
            public Number() 
            { 
                Characters = "0123456789"; 
            } 
     
            public Number(string characters) 
            { 
                Characters = characters; 
            } 
     
            /// <summary> 
            /// 数字转换为指定的进制形式字符串 
            /// </summary> 
            /// <param name="number"></param> 
            /// <returns></returns> 
            public string ToString(long number) 
            { 
                List<string> result = new List<string>(); 
                long t = number; 
     
                while (t > 0) 
                { 
                    var mod = t % Length; 
                    t = Math.Abs(t / Length); 
                    var character = Characters[Convert.ToInt32(mod)].ToString(); 
                    result.Insert(0, character); 
                } 
     
                return string.Join("", result.ToArray()); 
            }  
     
            /// <summary> 
            /// 指定字符串转换为指定进制的数字形式 
            /// </summary> 
            /// <param name="str"></param> 
            /// <returns></returns> 
            public long FromString(string str) 
            { 
                long result = 0; 
                int j = 0; 
                foreach (var ch in new string(str.ToCharArray().Reverse().ToArray())) 
                { 
                    if (Characters.Contains(ch)) 
                    { 
                        result += Characters.IndexOf(ch) * ((long)Math.Pow(Length, j)); 
                        j++; 
                    } 
                } 
                return result; 
            } 
     
        } 
     
         
     
        class Program 
        { 
            static void Print(long number, Number adapter) 
            { 
                Console.WriteLine("输入数字:{0}", number); 
                Console.WriteLine("规则:{0} 进制:{1}进制", adapter.Characters,adapter.Length); 
                var numtostr = adapter.ToString(number); 
                Console.WriteLine("转换结果:{0}", numtostr); 
                var strtonum = adapter.FromString(numtostr); 
                Console.WriteLine("逆向转换结果:{0}", strtonum); 
                Console.WriteLine(); 
                Console.WriteLine("============ 无聊的分割线============"); 
                Console.WriteLine(); 
            } 
     
            static void Main(string[] args) 
            { 
                //传统的2进制 
                Number n1 = new Number("01"); 
                //传统的8进制 
                Number n2 = new Number("01234567"); 
                //传统的16进制 
                Number n3 = new Number("0123456789ABCDEF"); 
                //自定义编码的N进制,这个可以用来做验证码? 
                Number n4 = new Number("爹妈说名字太长躲在树后面会被部落发现"); 
                //山寨一个短网址 
                Number n5 = new Number("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); 
     
                Print(65535, n1); 
                Print(65535, n2); 
                Print(65535, n3); 
                Print(65535, n4); 
                Print(165535, n5); 
                 
                Console.ReadKey(); 
     
            } 
        } 

  • 相关阅读:
    Educational Codeforces Round 59 (Rated for Div. 2)E. Vasya and Binary String 区间dp
    MySQL语法大全
    D. Buy a Ticket(优先队列+dijkstra)
    Two Sets(并查集分类)
    KMP浅显易懂
    深度理解链式前向星
    快速幂(幂运算取模的logn算法)
    hdu---1950---Bridging signals解题报告(求Lis n*logn贪心+二分搜索)
    dp背包
    线段树模板
  • 原文地址:https://www.cnblogs.com/simpleBlue3/p/3911525.html
Copyright © 2011-2022 走看看