我想要个26进制数的加法算法
0-25

解决方案 »

  1.   

    using System;namespace _26进制
    {
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    class Class1
    {
    //public static string [] num = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p"}; /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
    //0 1 2 3 4 5 6 7 8 9 a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p //Console.WriteLine(1291827 % 26);
    //Console.WriteLine((int)(1291827 / 26));// int k = 0,n=13*26*26,i=0,l=0;
    // l = leng(n);
    // if(l==0)
    // {
    // l = l + 1;
    // }
    //
    // string [] a = new string[l];
    // while (n>0)
    // {
    // k=n%26;
    // n=(n-k)/26;
    // a[i]=k.ToString();
    // i++;
    // }
    //
    // char [] c = GetChar(a);
    //
    // string sq = "";
    // foreach(char e in c)
    // {
    // sq +=e;
    // }
    // Console.WriteLine(StrReversal(sq));
    //
    // for(i=l-1;i>=0;i--)
    // {
    // Console.WriteLine(a[i]);
    // }
    //
    // Console.ReadLine();

    string s = "110a";
    string x = "20p";
    //s = StrReversal(s);
    //x = StrReversal(x);
    Char[] aArray = s.ToCharArray();
    //Console.WriteLine(GetNum(aArray)); Char[] xArray =x.ToCharArray();
    Console.WriteLine(Convert.ToString(GetNum(xArray))+"+"+Convert.ToString(GetNum(aArray))+"="+Convert.ToString(GetNum(xArray)+GetNum(aArray)));
      int k = 0,i=0,l=0;
    double n = GetNum(xArray)+GetNum(aArray);
    l = leng(n);
    if(l==0)
    {
    l = l + 1;
    } string [] a = new string[l];
    while (n>0)
    {
    k=(int)n%26;
    n=(n-k)/26;
    a[i]=k.ToString();
    i++;
    } char [] c = GetChar(a); string sq = "";
    foreach(char e in c)
    {
    sq +=e;
    }
    Console.WriteLine(s+"+"+x+"="+StrReversal(sq));
    Console.ReadLine();
    // Console.WriteLine(n("p").ToString());
    Console.ReadLine();
    } public static String StrReversal(String oldString)
    {
    //Convert string to char arry
    Char[] oldCharArray = oldString.ToCharArray();
    //Reversal from zero
    int index = 0;
    int cLength = oldCharArray.Length - 1;
    while(index<cLength)
    {
    //use char CTemp  to  swap
    char cTemp = oldCharArray[index];
    oldCharArray[index] = oldCharArray[cLength];
    oldCharArray[cLength] = cTemp;
    index ++;
    cLength --;
    }
    //Convert char array to string only have the constructor method
    string newString = new string(oldCharArray);
    return newString;
    }
    // private static string [] GetArray(string s)
    // {
    // s = "";
    // //double n = 0;
    // string [] a = new string[s.Length];
    // for(int i=0;i<s.Length;i++)
    // {
    // a[i] = s.Substring(i,1);
    // }
    // return a;
    // } private static double GetNum(char[] s)
    {
    double Snum = 0;
    int n = 0;
    for(int i=0;i<s.Length;i++)
    {
    if(s[i]>'9')
    {
    n = (int)s[i] - 87;
    }
    else
    {
    n = (int)s[i] - 48; 
    }
    Snum = Snum + n * Math.Pow(26,s.Length-1-i);
    }

    return Snum;
    } private static char [] GetChar(string[] a)
    {
    char [] c = new char[a.Length];
    char n = 'a';
    for(int i=0;i<a.Length;i++)
    {
    if(Convert.ToInt32(a[i])>9)
    {
    n = (char)(Convert.ToInt32(a[i]) + 87);
    }
    else
    { n = (char)(Convert.ToInt32(a[i]) + 48);
    }
                    c[i] = n;
    }

    return c;
    } private static int leng(double n)
    {
                int i=0;
    double s = 0;
    for(;;i++)
    {
    s = Math.Pow(26,i);
    if(s>n)
    {
    break;
    }
    else
    {
    continue;
    }
    }
    return i;
    }
    }
    }
    解贴后给出完美版