#include <cstdio> #include <cctype> int main() { unsigned char digits[20]; unsigned long long result[20]; int N=0, c; while (std::isdigit(c = getchar())) { digits[N++] = c - '0'; } result[N] = 1; result[N-1] = digits[N-1] + 1; for (int i=N-2; i>=0; --i) { result[i] = (digits[i] + 1) * result[i+1]; if (digits[i] == 1) { result[i] += (9 - digits[i+1]) * result[i+2]; } } printf("%llu\n", result[0]); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <cstdio> #include <cctype> int main() { unsigned char digits[20]; unsigned long long result[20]; int N=0, c; while (std::isdigit(c = getchar())) { digits[N++] = c - '0'; } result[N] = 1; result[N-1] = digits[N-1] + 1; for (int i=N-2; i>=0; --i) { result[i] = (digits[i] + 1) * result[i+1]; if (digits[i] == 1) { result[i] += (9 - digits[i+1]) * result[i+2]; } } printf("%llu\n", result[0]); } |