#include using namespace std; static const int Max = 1001; static int Counts[Max]; /* Luckily, for 1 to 9, the four-byte numerator and denominator can't overflow: values are bounded by (1+2)*3*4*5*6*7*8*9. */ static void doMore(int num, int den, int digit) { if (digit > 9) { if ((num % den) == 0) { num /= den; if ((num >= 0) && (num < Max)) { Counts[num] += 1; } } return; } int next = digit + 1; doMore(num + den * digit, den, next); // add doMore(num - den * digit, den, next); // subtract doMore(num * digit , den, next); // multiply doMore(num , den * digit, next); // divide } int main() { memset(Counts, 0, sizeof Counts); doMore(1, 1, 2); doMore(-1, 1, 2); for (int nn = 0; nn < Max; nn += 1) { cout << nn << ' ' << Counts[nn] << endl; } return 0; }