Link to home
Start Free TrialLog in
Avatar of engllf
engllf

asked on

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?
ASKER CERTIFIED SOLUTION
Avatar of yonat
yonat

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of sganta
sganta

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
#include <math.h>
unsigned NumberOfDigits(unsigned n)
{
    return n ? log10(n) + 1 : 1;
}

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