杭电3555题 为啥总是Output Limit Exceeded
3555
这是我的代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
long long f[20][3];
long long cal(long long n)
{
long long num[20],len=1,i,j,k,sum,flag,before;
num[0]=0;
num[1]=0;
while(n)
{
num[len]=n%10;
len++;
n=n/10;
}
num[len]=0;sum=0;flag=0;
for(i=len-1;i>0;i--)
{
sum=sum+f[i-1][2]*num[i];
if(flag)
sum=sum+f[i-1][0]*num[i];
if(!flag&&num[i]>4)
sum=sum+f[i-1][1];
if(num[i+1]==4&&num[i]==9)
flag=1;
}
return sum;
}
int main()
{
long long n,m,i,j,k,t,sum;
memset(f,0,sizeof(f));
f[0][0]=1;
for(i=1;i<=20;i++)
{
f[i][0]=f[i-1][0]*10-f[i-1][1];
f[i][1]=f[i-1][0];
f[i][2]=f[i-1][2]*10+f[i-1][1];
//cout<<f[i][2]<<endl;
}
while(scanf("%lld",&t))
{
for(i=1;i<=t;i++)
{
//cout<<"skjhgs"<<endl;
scanf("%lld",&m);
sum=cal(m+1);
printf("%lld\n",sum);
}
}
return 0;
}