: 1 A. , , : O(length of A), O(log(A)).
, . Java, #/++ - . , - , .
int count(int num, int sum) {
if (sum < 0) {
return 0;
}
int result = 0;
while (num % 10 > 0) {
--num;
if (sumOfDigits(num) == sum) {
++result;
}
}
if (num == 0) {
return result;
}
num /= 10;
for (int digit = 0; digit < 10; ++digit) {
result += count(num, sum - digit);
}
return result;
}
int sumOfDigits(int x) {
int result = 0;
while (x > 0) {
result += x % 10;
x /= 10;
}
return result;
}
int A = 12345;
int C = 13;
System.out.println(count(A + 1, C));
int total = 0;
for (int i = 1; i <= A; ++i) {
if (sumOfDigits(i) == C) {
++total;
}
}
System.out.println(total);
, A, . ( A C.)
, A == 1000000000 : . A == 10^1000.
, , . ( Java, hashtables -). - , , .
private Map<String, Integer> mem;
int count(int num, int sum) {
if (sum < 0) {
return 0;
}
String key = num + " " + sum;
if (mem.containsKey(key)) {
return mem.get(key);
}
mem.put(key, result);
return result;
}