【题目】http://codeforces.com/problemset/problem/817/C
【题意】“真大数”:这个数减去各位相加的和大于等于k的数。问不大于n的数中有多少个“真大数”。
【思路】如果一个数是真大数,那么比他大的数一定也是真大数。那么只要找到第一个真大数m,n-m+1就是答案。
【代码】
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll sum(ll x)
{
ll ans=0;
while(x>0)
{
ans+=x%10;
x=x/10;
}
return ans;
}
int main()
{
ll n,k;
cin>>n>>k;
ll l=1,r=n;
while(l<=r)
{
ll mid=(l+r)/2;
if(mid-sum(mid)>=k)r=mid-1;//如果当前mid是真大数,那么向下寻找
else l=mid+1;//如果当前mid不是真大数,那么向上寻找
}
cout<<n-l+1<<endl;
}