Блог пользователя d891320478

Автор d891320478, 12 лет назад, По-английски

Don't use (int)log10(n)+1 to count the length of n.

It may cause error because of accuracy.

  • Проголосовать: нравится
  • +1
  • Проголосовать: не нравится

»
12 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

Instead, try this:

int digits(int x){ //works for x>0, for x<0 simply put x=-x, and for x==0 return 1
   int result=0;
   while (x>0){
      result++;
      x/=10;
   }
   return result;
}

It's just a few lines of code. I know speed is crucial here, but this can be typed in 15 seconds. Using floating point arithmetic for things that can be done with integer arithmetic is not recommended.

  • »
    »
    12 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    Here's an even faster way :)

    1. Integer.valueOf(x).toString().length();

    2. (""+x).toString().length();

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится

      even faster and in C:

      len=sprintf(buf,"%d",x);

      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Quite elegant, but, the code i posted works in every base and takes a lot less time because it doesn't rely on string operations. Whatever suits people's needs.

      • »
        »
        »
        »
        12 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

        Yours is shorter, but it takes longer to type.

        1. Integer.toString(x).length();

        2. Integer.toString(x,17).length(); // Different base

        Since it's a string operation I use it when I know it won't effect too much on the speed.