Int32 i= 12234;
String s = i.ToString();通过s[j]

解决方案 »

  1.   


    Tostring().Substring(n-1,1);
      

  2.   

    int n = 123456;
    Console.WriteLine((n- n / 10* 10).ToString());
      

  3.   

    int n = 12345;
    int i = 2;
    int t = n / Math.Power(10, i-1);  //去尾
    int r = t % 10; //取最后一位
      

  4.   


    哈哈,VMM现身了。怎么感觉你就是一个“不懂装懂”的回贴人啊。
      

  5.   

    测了一下,花费是字符串时间的1/6左右        /// <summary>
            /// 求num在n位上的数字
            /// </summary>
            /// <param name="num">正整数</param>
            /// <param name="n">所求数字位置</param>
            int findIt(int num, int n)
            {            int power = 1;
                for (int i = 0; i < n; i++)
                {
                    power *= 10;
                }
                return (num - num / power * power) * 10 / power;
            }
      

  6.   


    在VMM失误时,开个玩笑。 :)上面的方法中,5楼效率最高。private void button1_Click(object sender, EventArgs e)
    {
        int m, n = 123456;    DateTime dt1 = DateTime.Now;
        
        for (int i = 0; i < 100000000; i++)
        {
             m = n - n / 10 * 10;
        }
        
        DateTime dt2 = DateTime.Now;    for (int i = 0; i < 100000000; i++)
        {
             m = n % 10;
        }
        
        DateTime dt3 = DateTime.Now;    MessageBox.Show((dt2 - dt1).Milliseconds.ToString());  // 868
        MessageBox.Show((dt3 - dt2).Milliseconds.ToString());  // 765
    }
      

  7.   

    vmm是说我呢,GSDN00A你需要增强中文理解能力,他只是说和转换成字符后,再取对应的位,和用数字乘除相比。你就钻牛角尖不看人家说话的重点。5楼的是快,vmm是说我回复的那个。
      

  8.   

    private void button1_Click(object sender, EventArgs e)
    {
        int m;    int tick = Environment.TickCount;    int times = 100000000;
        for (int i = 0; i < times; i++)
        {
            m = 102456116 - 102456116 / 10 * 10;
        }
        tick = Environment.TickCount - tick;    int tick2 = Environment.TickCount;
        for (int i = 0; i < times; i++)
        {
            m = 102456116 % 10;
        }
        tick2 = Environment.TickCount - tick2;    MessageBox.Show(tick.ToString());  // 281
        MessageBox.Show(tick2.ToString());  // 282}
      

  9.   

    直接取余未必快啊,怎么我这里测试的结果是相反的呢?
    乘除耗时:00:00:00.5236724
    取余耗时:00:00:00.5544903
    我是每次取不同的数,你们的是取相同的数    class Program
        {        static Stopwatch watch = new Stopwatch();
            static Stopwatch watch2 = new Stopwatch();
            static void Main( string[] args )
            {
                int m,n;            watch2.Start();
                for (int i = 100000; i < 100000000; i++)
                {
                    //n = i / 10;
                    n = i;
                    m = n - n / 10 * 10;
                }
                watch2.Stop();
                Console.WriteLine("乘除耗时: {0}", watch2.Elapsed);            watch.Start();
                for (int i = 100000; i < 100000000; i++)
                {
                    //n = i / 10;
                    n = i;
                    m = n % 10;
                }
                watch.Stop();
                Console.WriteLine("取余耗时: {0}", watch.Elapsed);            GC.Collect();
                Console.ReadLine();
            }
      

  10.   

    如果取第i位数
    如果去个位数
    n%=10;
    其他位数
    n%=10^(i+1);
    n/=10^(i-1);
      

  11.   


    兄弟,没感觉出来是开玩笑吗? VMM的实力有目共睹,不用我们为其辩护。
    兄弟,你在22楼贴上了一个错误的测试用例,结果是随机的,不能证明任何问题。原因吗?你现在应该知道为什么了。哈哈,是否说明你是一个“不懂装懂”的回贴人? 看了阿非宣传的“知不知”理论,不敢回贴了  :)
      

  12.   

    根据阿非宣传的“知不知”理论,证明.net新旧斑竹是“不懂装懂”的回贴人。
      

  13.   


    IL是我的软肋,我没说我理解这其中曲直,只是把你贴的例子测试,并没有你贴的结果那么明显,并且我尝试用常量来替换后,得到结果是和你的不同,对IL这层我的确不懂,我只是用我测试的结果来说,你可以说任何一个人不懂装懂,这个都成立,所有人都有不懂的地方。这句话只说明了你讨论问题时候喜欢人身攻击而不是讨论问题本身。这类话题到此为止,那谁了解IL,帮我解释一下使用变量和不使用变量,为什么生成的IL会差别这么大把。实在没看明白。
    code1:int m;
    int times = 100000000;
    for (int i = 0; i < times; i++)
    {
        m = 102456116 - 102456116 / 10 * 10;
    }对应ILL_000c: stloc.1 
    L_000d: ldc.i4 0x5f5e100
    L_0012: stloc.2 
    L_0013: ldc.i4.0 
    L_0014: stloc.3 
    L_0015: br.s L_001f
    L_0017: nop 
    L_0018: ldc.i4.6 
    L_0019: stloc.0 
    L_001a: nop 
    L_001b: ldloc.3 
    L_001c: ldc.i4.1 
    L_001d: add 
    L_001e: stloc.3 
    L_001f: ldloc.3 
    L_0020: ldloc.2 
    L_0021: clt 
    L_0023: stloc.s CS$4$0000
    L_0025: ldloc.s CS$4$0000
    L_0027: brtrue.s L_0017
    int m = 102456116;
    int times = 100000000;
    for (int i = 0; i < times; i++)
    {
        m = m - m / 10 * 10;
    }
    L_000c: stloc.1 
    L_000d: ldc.i4 0x5f5e100
    L_0012: stloc.2 
    L_0013: ldc.i4.0 
    L_0014: stloc.3 
    L_0015: br.s L_0027
    L_0017: nop 
    L_0018: ldloc.0 
    L_0019: ldloc.0 
    L_001a: ldc.i4.s 10
    L_001c: div 
    L_001d: ldc.i4.s 10
    L_001f: mul 
    L_0020: sub 
    L_0021: stloc.0 
    L_0022: nop 
    L_0023: ldloc.3 
    L_0024: ldc.i4.1 
    L_0025: add 
    L_0026: stloc.3 
    L_0027: ldloc.3 
    L_0028: ldloc.2 
    L_0029: clt 
    L_002b: stloc.s CS$4$0000
    L_002d: ldloc.s CS$4$0000
    L_002f: brtrue.s L_0017
      

  14.   

    真比较 n - n / 10 * 10和  n%10速度谁快
    光做测试怎么行啊?CPU温度变化都有影响
    直接看汇编代码好了
      

  15.   


    在我的机器上,改变先后顺序、改变循环上下界,n次运行的结果都是一致的:
    那就是 n-n/10*10 比 n%10 快另外,取百万位的数只要先除以一百万即可,没有问题的
      

  16.   


    你的公式只是找到余数而已,除以1百万
    n=1346436457
     n - n / 1000000 * 1000000 = 436457
    (n%10000000)/1000000  取个余再除  我们应该想办法找到比这个更快的呀
      

  17.   

    个位
    int a = 1001;
    int b = a % 10
      

  18.   

    int getOne(int num)
    {
       return num%10;
    }int getN(int num,int n)
    {
       if(n == 1)
         return getOne(num);
       int div = 1;
       for(int i = 1; i < n;i++)
         div *= 10;
       int ret = num/div;
       return getOne(ret);
    }