What's the fastest way to divide an integer by 3?

后端 未结 12 2143
天涯浪人
天涯浪人 2020-11-29 03:40
int x = n / 3;  // <-- make this faster

// for instance

int a = n * 3; // <-- normal integer multiplication

int b = (n << 1) + n; // <-- potentiall         


        
12条回答
  •  醉酒成梦
    2020-11-29 03:54

    For really large integer division (e.g. numbers bigger than 64bit) you can represent your number as an int[] and perform division quite fast by taking two digits at a time and divide them by 3. The remainder will be part of the next two digits and so forth.

    eg. 11004 / 3 you say

    11/3 = 3, remaineder = 2 (from 11-3*3)

    20/3 = 6, remainder = 2 (from 20-6*3)

    20/3 = 6, remainder = 2 (from 20-6*3)

    24/3 = 8, remainder = 0

    hence the result 3668

    internal static List Div3(int[] a)
    {
      int remainder = 0;
      var res = new List();
      for (int i = 0; i < a.Length; i++)
      {
        var val = remainder + a[i];
        var div = val/3;
    
        remainder = 10*(val%3);
        if (div > 9)
        {
          res.Add(div/10);
          res.Add(div%10);
        }
        else
          res.Add(div);
      }
      if (res[0] == 0) res.RemoveAt(0);
      return res;
    }
    

提交回复
热议问题