#include <iostream>
#include <math.h>
using namespace std;
int main(int argc, char const *argv[]) {
unsigned long long int in, tmp, result=1;
int dbl[20], last=0, dblCount = 0;
for (int i=0; i<20; i++) {
dbl[i]=0;
}
cin >> in;
tmp = in;
do {
if (tmp%10 == 1 && last > 0 && last < 9) {
dbl[dblCount++] = 10 + last;
}
last = tmp%10;
result *= last+1;
tmp /= 10;
} while (tmp >= 10);
if (tmp == 1 && last < 9) {
dbl[dblCount++] = 10 + last;
}
result *= tmp+1;
tmp = result;
bool last11 = false;
for (int i=1; i<pow(2, dblCount); i++) {
int tmpI = i;
last11 = false;
for (int j=dblCount-1; j>=0; j--) {
int twoPow = pow(2, j);
if (tmpI >= twoPow && !last11) {
tmpI /= twoPow;
result += (tmp / (2 * (1 + dbl[j]%10))) * (19-dbl[j]);
last11 = dbl[j] == 11;
} else if (last11) {
last11 = false;
if (j==0 && i==pow(2, dblCount)-1) {
result -= (tmp / (2 * (1 + dbl[j+1]%10))) * (19-dbl[j+1]);
}
}
}
}
cout << result;
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 | #include <iostream> #include <math.h> using namespace std; int main(int argc, char const *argv[]) { unsigned long long int in, tmp, result=1; int dbl[20], last=0, dblCount = 0; for (int i=0; i<20; i++) { dbl[i]=0; } cin >> in; tmp = in; do { if (tmp%10 == 1 && last > 0 && last < 9) { dbl[dblCount++] = 10 + last; } last = tmp%10; result *= last+1; tmp /= 10; } while (tmp >= 10); if (tmp == 1 && last < 9) { dbl[dblCount++] = 10 + last; } result *= tmp+1; tmp = result; bool last11 = false; for (int i=1; i<pow(2, dblCount); i++) { int tmpI = i; last11 = false; for (int j=dblCount-1; j>=0; j--) { int twoPow = pow(2, j); if (tmpI >= twoPow && !last11) { tmpI /= twoPow; result += (tmp / (2 * (1 + dbl[j]%10))) * (19-dbl[j]); last11 = dbl[j] == 11; } else if (last11) { last11 = false; if (j==0 && i==pow(2, dblCount)-1) { result -= (tmp / (2 * (1 + dbl[j+1]%10))) * (19-dbl[j+1]); } } } } cout << result; return 0; } |
English