#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; } |
English