您的位置:首页 > 其它

阿里巴巴2018届算法岗招聘题

2017-08-25 21:37 190 查看
考试的时候通过率60%,找了半天bug,没发现错误,以为int大小不够,到交卷了才反应过来,程序有时间限制,改进算法如下,时间比60%好,事后诸葛



#include<iostream>  

#include<cmath>

using namespace std;

long int wz(long int n)

{

    long int i=1;
while ( !(n<pow(10,i) ) )
{
i++;
}

    return i;

}

long int Get(long int n)

{

    long int x;

long int i,k=1,sum=0,bz=1,sum0=0;

while(bz)
{
sum0+=wz(k);

        sum+=sum0;
if (sum>=n)
{
 bz=0;
 break;
}
   k++;
}

  
int temp;
if(sum==n)
{
x=k%10;
}
else
{

for(i=k;i>=1;i--)
{
   sum-=wz(i);
if (sum<n)
{
   break;
}
}

        sum+=wz(i);

temp=sum-n;
   for(k=1;k<=temp;k++)
{
       i/=10;
}

        i%=10;
x=i;
}

    

        return x;

}

int main()  

{  

    long int n;

    cin>>n;

    long int r = Get(n);

        

    cout<<r;  

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: