#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N=20;
long long dp[N][3],a[N];
int T;
long long n;
void init(){
dp[0][0]=1;
for(int i=1;i<N;i++){
dp[i][0]=dp[i-1][0]*10-dp[i-1][1];
dp[i][1]=dp[i-1][0];
dp[i][2]=dp[i-1][2]*10+dp[i-1][1];
}
}
int main(){
cin>>T;
init();
while(T--){
cin>>n;
n++;
int len=0,last=0;
long long ans=0;
bool flag=false;
memset(a,0,sizeof(a));
while(n){
a[++len]=(long long)n%10;
n/=10;
}
for(int i=len;i>=1;i--){
ans+=dp[i-1][2]*a[i];
if(flag){
ans+=dp[i-1][0]*a[i];
}
if(!flag && a[i] > 4){
ans+=dp[i-1][1];
}
if(9 == a[i] && 4 == last){
flag=true;
}
last=a[i];
}
cout<<ans<<endl;
}
return 0;
}
HDU 3555Bomb数位dp
最新推荐文章于 2019-09-10 22:59:29 发布