#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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.