This code prints the number of digits 0,1,2,... 9s    between A and B
How does it works?

#include <iostream>

using namespace std;

int pot10(int i) {
    int n = 1;
    while (i--) n *= 10;
    return n;
}

int digits(int n, int d) {
    if (n < 10 && n > d - 1) return d ? 1 : 0;
    int s = 0, r = 0, i = 1;
    int p = pot10(i);
    while (n / (p / 10) >= 1) {
        if (!d) s -= 1 * (p / 10);
        if ((n % p)> ((d + 1) * (p / 10) - 2)) {
            s += (n / p + 1) * p / 10;
            r = 0;
        } else {
            r = (n % p)>(d * (p / 10) - 2) ? (n % p)-(d * (p / 10) -
2) - 1 : 0;
            s += (n / p) * (p / 10) + r;
        }
        i++;
        p = pot10(i);
    }
    return s;
}

int main() {
    int A, B, a, b, i;
    while (cin >> A >> B, A, B) {
        for (i = 0; i < 9; i++) {
            a = digits(A - 1, i);
            b = digits(B, i);
            cout << b - a << " ";
        }
        a = digits(A - 1, i);
        b = digits(B, i);
        cout << b - a << endl;
    }
    return 0;
}

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to