标签:
题目链接:
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 131072/65536 K (Java/Others)
#include <bits/stdc++.h> using namespace std; #define Riep(n) for(int i=1;i<=n;i++) #define Riop(n) for(int i=0;i<n;i++) #define Rjep(n) for(int j=1;j<=n;j++) #define Rjop(n) for(int j=0;j<n;j++) #define mst(ss,b) memset(ss,b,sizeof(ss)); typedef long long LL; const LL mod=1e9+7; const double PI=acos(-1.0); const int inf=0x3f3f3f3f; const int N=1e6+5e5; LL dp[25][3],n; int b[25]; int fun() { mst(dp,0); dp[0][2]=1LL; for(int i=1;i<23;i++) { dp[i][0]=dp[i-1][0]*10+dp[i-1][1]; dp[i][1]=dp[i-1][2]; dp[i][2]=dp[i-1][2]*10-dp[i-1][1]; } } int main() { int t; scanf("%d",&t); fun(); while(t--) { scanf("%lld",&n); LL temp=n,ans=0; int cnt=1; while(temp) { b[cnt++]=temp%10; temp/=10; } b[cnt]=0; int flag=0; for(int i=cnt;i>0;i--) { ans+=dp[i-1][0]*(LL)b[i]; if(b[i]>4&&!flag) { ans+=dp[i-1][1]; } if(flag) { ans+=dp[i-1][2]*b[i]; } if(b[i+1]==4&&b[i]==9) { flag=1; } } if(flag)ans++; printf("%lld\n",ans); } return 0; }
标签:
原文地址:http://www.cnblogs.com/zhangchengc919/p/5469197.html