Algorithm

What is the best algorithm to check a number is in which particular range of:
0 to 9
10 to 99
100 to 999
1000 to 9999
10000 to 99999
...rate at exponential of 10

E.g X = 555 is in the range of 100 - 999

I use a if-else-then to do the checking but its looks terribly ugly.

Any advice?
engllfAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

yonatCommented:
int n = 100000; // or another max number
while (n > 1)
    if ( x != x % n)
        break;
    else
        n /= 10;

x is in the reange n to n*10.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
sgantaCommented:
Hi !

I have simple and beautiful algorithm and solution for your problem.

ALGORITHM
1. Read the number into "n";
2. Store this number n as a string into test
    i.e., test = string(n);
3. Get the length of the string into length
    length = string_length(n);
4. Now
    Range_From = power(10,length-1)
    Range_To     = power(10,length)-1
5. End of the algorithm

/* Here the solution in C++ */

#include <iostream.h>
#include <string.h>
#include <math.h>

void main(void)
{
   int n,len,ifrom,ito;
   char *test;

   cout << "Enter a number ";
   cin >>n;

   test = itoa(n); /* Converts integer to Ascii */
   len = strlen(test);
   ifrom = pow(10,len-1);
   ito = pow(10,len)-1;
   cout << "The number "<<n<<" is in the range from "<<ifrom<<" to "<<ito<<endl;
}

This  algorithm is tested and it works fine. If you are interested with my answer
Please reject the above answer and accept my answer.
Thank you.
JESUS LOVES YOU - sganta
0
alexoCommented:
#include <math.h>
unsigned NumberOfDigits(unsigned n)
{
    return n ? log10(n) + 1 : 1;
}

0
Booth882Commented:
here's one thats straight forward and has no limit to the size of the number:

#include <iostream.h>

int Power = 1;

cin >> int TheNumberToBeChecked;

while(1)
{
    if(TheNumberToBeChecked >= 10 ^ Power)
        Power++;
    else
        break;
}

try it and see what you think
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C++

From novice to tech pro — start learning today.