#include <iostream> using namespace std; unsigned long long ile111(unsigned long long cyfry[], int x, int dlugosc_liczby) { unsigned long long suma = 1; for (int i = x; i < dlugosc_liczby; i++) suma *= (cyfry[i] + 1); return suma; } unsigned long long ile222(unsigned long long cyfry[], int x, int dlugosc_liczby) { unsigned long long suma1 = 1; unsigned long long suma2 = 0; for (int i = x; i < dlugosc_liczby; i++) { suma1 *= (cyfry[i] + 1); if (dlugosc_liczby - i > 1 && cyfry[i] + 10 * cyfry[i + 1] < 19 && cyfry[i] + 10 * cyfry[i + 1] > 9) { suma2 += (19 - (cyfry[i] + (10 * cyfry[i + 1]))) * ile222(cyfry, i + 2, dlugosc_liczby) * ile111(cyfry, x, i); } } return suma1 + suma2; } int main() { unsigned long long n; cin >> n; unsigned long long ile = 0; unsigned long long ile1 = 1; unsigned long long ile2 = 0; int dlugosc_liczby = 0; unsigned long long* cyfry = new unsigned long long[19]; int j = 0; while (n > 0) { cyfry[j] = n % 10; n = n / 10; dlugosc_liczby++; j++; } for (int i = 0; i < dlugosc_liczby; i++) { ile1 *= (cyfry[i] + 1); if (dlugosc_liczby - i > 1 && cyfry[i] + 10 * cyfry[i + 1] < 19 && cyfry[i] + 10 * cyfry[i + 1] > 9) { ile2 += (19 - (cyfry[i] + (10 * cyfry[i + 1]))) * ile222(cyfry, i + 2, dlugosc_liczby) * ile111(cyfry, 0, i); } } ile = ile1 + ile2; cout << ile; return 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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #include <iostream> using namespace std; unsigned long long ile111(unsigned long long cyfry[], int x, int dlugosc_liczby) { unsigned long long suma = 1; for (int i = x; i < dlugosc_liczby; i++) suma *= (cyfry[i] + 1); return suma; } unsigned long long ile222(unsigned long long cyfry[], int x, int dlugosc_liczby) { unsigned long long suma1 = 1; unsigned long long suma2 = 0; for (int i = x; i < dlugosc_liczby; i++) { suma1 *= (cyfry[i] + 1); if (dlugosc_liczby - i > 1 && cyfry[i] + 10 * cyfry[i + 1] < 19 && cyfry[i] + 10 * cyfry[i + 1] > 9) { suma2 += (19 - (cyfry[i] + (10 * cyfry[i + 1]))) * ile222(cyfry, i + 2, dlugosc_liczby) * ile111(cyfry, x, i); } } return suma1 + suma2; } int main() { unsigned long long n; cin >> n; unsigned long long ile = 0; unsigned long long ile1 = 1; unsigned long long ile2 = 0; int dlugosc_liczby = 0; unsigned long long* cyfry = new unsigned long long[19]; int j = 0; while (n > 0) { cyfry[j] = n % 10; n = n / 10; dlugosc_liczby++; j++; } for (int i = 0; i < dlugosc_liczby; i++) { ile1 *= (cyfry[i] + 1); if (dlugosc_liczby - i > 1 && cyfry[i] + 10 * cyfry[i + 1] < 19 && cyfry[i] + 10 * cyfry[i + 1] > 9) { ile2 += (19 - (cyfry[i] + (10 * cyfry[i + 1]))) * ile222(cyfry, i + 2, dlugosc_liczby) * ile111(cyfry, 0, i); } } ile = ile1 + ile2; cout << ile; return 0; } |