Little Sub and Mr.Potato's Math Problem-构造

链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5864

思路 : 判断小于它的合法的,再看大于它的合法的,特判10000、10、1000.... 这种情况

.

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll t,n,k,m,po[222];
ll getmin(ll x)
{
ll ret=0,data[55],id=0;
po[0]=1;
while(x)
{
data[id++]=x;
x/=10;
po[id]=po[id-1]*10;
}
for(int i=0; i<id; i++)
ret+=data[i]-po[id-i-1]+1;
return ret;
}
int main()
{
scanf("%lld",&t);
while(t--)
{
scanf("%lld%lld",&k,&m);
m-=getmin(k);
if(m<0)printf("0\n");
else if(m==0)printf("%lld\n",k);
else
{
ll hig,big;
for(ll i=1;; i*=10)
if(k/i<10)
{
big=i;
hig=k-i;
break;
}
if(big==k)printf("0\n");
else
{
big*=10;
hig*=10;
while(m>hig)
{
m-=hig;
hig*=10;
big*=10;
}
printf("%lld\n",big+m-1);
}
}
}
return 0;
}

  

上一篇:PHP- Windows无法在本地计算机启动Apache的解决方法


下一篇:Windows 不能在 本地计算机 启动 SQL Server 服务 错误代码126