比如:365
我如何才能分别得到3,6,5,呢?

解决方案 »

  1.   

    首先声明,我不考虑tochararray的做法,因为这个方法将会被执行很多次,我担心chararray在性能上会有问题。
      

  2.   

    无所谓了。int一共也才支持10位10进制数。慢步到哪去的。不用字符操作就用2楼的取模。
      

  3.   


                int n = 365;
                char[] ret = n.ToString().ToCharArray();
      

  4.   


    Func<int, int[]> GetDecBit = i =>
    {
        List<int> bits = new List<int>();
        while (i>10)
        {
            int n = i % 10;
            if (n == 0) break;
            bits.Add(n);
            i /= 10;                    
        }
        bits.Add(i);
        bits.Reverse();
        return bits.ToArray();
    };
    GetDecBit(123456).ToList().ForEach(i => Console.Write(i));
      

  5.   

    不用lambda,static int[] GetDecBit(int i)
    {
        List<int> bits = new List<int>();
        while (i > 10)
        {
            int n = i % 10;
            if (n == 0) break;
            bits.Add(n);
            i /= 10;
        }
        bits.Add(i);
        bits.Reverse();
        return bits.ToArray();
    }
    //调用
     GetDecBit(123456)
      

  6.   

    稍微修改一下static int[] GetDecBit(int i)
    {
        List<int> bits = new List<int>();
        while (i >= 10)
        {
            int n = i % 10;
            bits.Add(n);
            i /= 10;
        }
        bits.Add(i);
        bits.Reverse();
        return bits.ToArray();
    }
    但是这样显然没有直接字符串的快啊。
      

  7.   

    去掉
    if (n == 0) break;
    即可。
      

  8.   


    E8400的CPU,整数运算速度为每秒270亿次....楼主有多少数量?
      

  9.   

    List<int> lst= new List<int>();
        while (i >1)
        {
           lst.Add( i % 10);
           i /= 10;
        }
        if(i>0) lst.Add(i);
        lst.Reverse();
        int[] arr=lst.ToArray();
      

  10.   

    %10与/10,效率有问题,可以结合下面的函数实现x/10=x*0xcccccccd/0x800000000private static uint div10(uint value)
            {
                ulong value64 = ((ulong)value << 2) + ((ulong)value << 3);
                value64 += value64 << 4;
                value64 += value64 << 8;
                value64 += value64 << 16;
                return (uint)((value64 + value) >> 35);
            }
    private static uint mod10(uint value)
            {
                ulong value64 = ((ulong)value << 2) + ((ulong)value << 3);
                value64 += value64 << 4;
                value64 += value64 << 8;
                value64 += value64 << 16;
                uint newValue = (uint)((value64 + value) >> 35);
                return value - (newValue << 1) - (newValue << 3);
            }
    private static ushort div10(ushort value)
            {
                uint value32 = ((uint)value << 2) + ((uint)value << 3);
                value32 += value32 << 4;
                value32 += value32 << 8;
                return (ushort)((value32 + value) >> 19);
            }
    private static ushort mod10(ushort value)
            {
                uint value32 = ((uint)value << 2) + ((uint)value << 3);
                value32 += value32 << 4;
                value32 += value32 << 8;
                value32 = (value32 + value) >> 19;
                return (ushort)(value - (value32 << 1) - (value32 << 3));
            }
      

  11.   

    循环,mod(10),得到的数再mod(10)。
      

  12.   


    int n = 365;
    int[] M =new int[n.ToString().Length];
    for(int i = 0 ; i < n.ToString().Length ; i++)
    {
        M[n.ToString().Length - i] = n%10;
        n = n / 10;
    }
      

  13.   


                int n = 365;
                int LengthTmp = n.ToString().Length;
                int[] M = new int[LengthTmp];
                for (int i = 0; i < LengthTmp; i++)
                {
                    M[LengthTmp - i - 1] = n % 10;
                    n = n / 10;
                }
    用这个吧 刚才那个没有测过