tab = [[0 for x in range(100)] for x in range(100)] tab[0][0] = 1; for digits in range(9): for sum in range(90): for last in range(10): tab[digits + 1][sum + last] += tab[digits][sum]; def count(n, sum, digits): if (n == 0): return (sum == 0) and 1 or 0; first = n/10**digits; if (sum < first): return 0; ret = count(n % 10**digits, sum-first, digits-1); for d in range(first): ret += tab[digits][sum-d]; return ret;