Now the counter-terrorist knows the number N. They want to know the final points of the power. Can you help them?
The input terminates by end of file marker.
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<cmath>
#include<cstdlib>
#define mod 1000000007
using namespace std;
long long dp[21][3]={1};
long long pow(long long i){//求出10的i次方
long long sum=1;
while(i--)sum*=10;
return sum;
}
int main(){
for(int i=1;i<=20;i++){//
dp[i][0]=dp[i-1][0]*10-dp[i-1][1];//到第i位不含49的數的個數
dp[i][1]=dp[i-1][0];//到第i位不含49但是位數是9的數的個數
dp[i][2]=dp[i-1][2]*10+dp[i-1][1];//到第i位含49的數的個數
}
int t;
cin>>t;
while(t--){
long long n,a[30],len=0;
cin>>n;
long long nn=n;
while(n){
a[++len]=n%10;
n/=10;
}
long long k=len;
long long sum=0,before=0;
while(len){
sum+=dp[len-1][2]*a[len];
if(a[len]>4)
sum+=dp[len-1][1];//這裏好好理解
if(a[len]==9&&before==4){
sum+=(nn%pow(len-1));
sum++;
break;
}
before=a[len];
len--;
}
cout<<sum<<endl;
}
return 0;
}