#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
unsigned long long f_one(unsigned long long len_one){
if(len_one==-1){
return 0;
}else if(len_one%2==0){
return (pow(2,len_one)*(pow(2,len_one+1)+1))/3;
}else{
return (pow(2,len_one)*(pow(2,len_one+1)-1))/3;
}
}
int main(){
unsigned long long n;
cin >> n;
if(n==0){
cout << 1;
}else{
vector<pair<unsigned long long,int> >serie;
unsigned long long max_len_one = 0;
unsigned long long len_one = 0;
int digit_to_ad = -1;
while(n>0){
int digit = n%10;
if(digit!=1 or digit==n ){
if(digit==1){
len_one++;
}
serie.push_back(make_pair(len_one,digit_to_ad));
if(len_one>max_len_one){
max_len_one = len_one;
}
len_one=0;
digit_to_ad = digit;
if(digit==n and digit!=1){
serie.push_back(make_pair(len_one,digit_to_ad));
}
}else{
len_one++;
}
n/=10;
}
unsigned long long sum_one=0;
unsigned long long sum=1;
//cout<< serie[0].first << " " << serie[0].second << endl;
sum_one+=f_one(serie[0].first);
for(unsigned long long i=1; i<serie.size(); i++){
//cout<< serie[i].first << " " << serie[i].second << endl;
sum*=((serie[i].second+1)*f_one(serie[i].first)+((9-serie[i].second)*f_one(serie[i].first-1)));
}
if(sum!=0 and sum_one!=0){
sum*=sum_one;
}
cout.precision(0);
cout<< fixed<<sum;
}
}
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 65 66 67 68 69 70 71 72 73 | #include<iostream> #include<vector> #include<cmath> using namespace std; unsigned long long f_one(unsigned long long len_one){ if(len_one==-1){ return 0; }else if(len_one%2==0){ return (pow(2,len_one)*(pow(2,len_one+1)+1))/3; }else{ return (pow(2,len_one)*(pow(2,len_one+1)-1))/3; } } int main(){ unsigned long long n; cin >> n; if(n==0){ cout << 1; }else{ vector<pair<unsigned long long,int> >serie; unsigned long long max_len_one = 0; unsigned long long len_one = 0; int digit_to_ad = -1; while(n>0){ int digit = n%10; if(digit!=1 or digit==n ){ if(digit==1){ len_one++; } serie.push_back(make_pair(len_one,digit_to_ad)); if(len_one>max_len_one){ max_len_one = len_one; } len_one=0; digit_to_ad = digit; if(digit==n and digit!=1){ serie.push_back(make_pair(len_one,digit_to_ad)); } }else{ len_one++; } n/=10; } unsigned long long sum_one=0; unsigned long long sum=1; //cout<< serie[0].first << " " << serie[0].second << endl; sum_one+=f_one(serie[0].first); for(unsigned long long i=1; i<serie.size(); i++){ //cout<< serie[i].first << " " << serie[i].second << endl; sum*=((serie[i].second+1)*f_one(serie[i].first)+((9-serie[i].second)*f_one(serie[i].first-1))); } if(sum!=0 and sum_one!=0){ sum*=sum_one; } cout.precision(0); cout<< fixed<<sum; } } |
English