#include<iostream>
#include <vector>
using namespace std;
int calculateNumbers(int);
int main() {
int num;
cin >> num;
cout << calculateNumbers(num);
}
int calculateNumbers(int num) {
vector<int> listOfDigits;
while(num > 0) {
listOfDigits.insert(listOfDigits.begin(), num % 10);
num /= 10;
}
int dp [listOfDigits.size()];
dp[listOfDigits.size() - 1] = listOfDigits[listOfDigits.size() - 1] + 1;
for (int i =listOfDigits.size() - 2 ;i >= 0 ;i --) {
int fromOneNumber = dp[i + 1] * (listOfDigits[i] + 1);
int fromTwoNumbers = 0;
int twoDigitNumber = listOfDigits[i] * 10 + listOfDigits[i + 1];
if (twoDigitNumber <= 18) {
int num = 19 - twoDigitNumber;
if (i + 2 > listOfDigits.size() - 1) {
fromTwoNumbers = num;
} else {
fromTwoNumbers = num * dp[i + 2];
}
}
dp[i] = fromOneNumber + fromTwoNumbers;
}
return dp[0];
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #include<iostream> #include <vector> using namespace std; int calculateNumbers(int); int main() { int num; cin >> num; cout << calculateNumbers(num); } int calculateNumbers(int num) { vector<int> listOfDigits; while(num > 0) { listOfDigits.insert(listOfDigits.begin(), num % 10); num /= 10; } int dp [listOfDigits.size()]; dp[listOfDigits.size() - 1] = listOfDigits[listOfDigits.size() - 1] + 1; for (int i =listOfDigits.size() - 2 ;i >= 0 ;i --) { int fromOneNumber = dp[i + 1] * (listOfDigits[i] + 1); int fromTwoNumbers = 0; int twoDigitNumber = listOfDigits[i] * 10 + listOfDigits[i + 1]; if (twoDigitNumber <= 18) { int num = 19 - twoDigitNumber; if (i + 2 > listOfDigits.size() - 1) { fromTwoNumbers = num; } else { fromTwoNumbers = num * dp[i + 2]; } } dp[i] = fromOneNumber + fromTwoNumbers; } return dp[0]; } |
English