http://acm.ecnu.edu.cn/problem/1159/
给定m,n问从m到n之间有多少0。
又到了令人头大的数位dp时间……
不过这里没有用数位dp,直接前缀和+递推解决的。比较费草稿纸而不是键盘,属于思维题吧。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll calc(ll n)
{
if (n < 0) return 0;
ll ans = 1;
for (ll tens = 10; n / tens; tens *= 10)
ans += (n%tens == n%(tens/10)) ? (n/tens-1) * (tens/10) + (n%(tens/10))+1:
(n/tens) * (tens / 10);
return ans;
}
int main()
{
ll n, m;
while (cin >> m >> n && ~m && ~n)
printf("%lld\n", calc(n) - calc(m-1));
return 0;
}