https://vjudge.net/problem/UVA-11038
题意:
输入两个非负整数m和n,求将m~n的所有整数写出来,一共要写多少个数字0?
思路:
举个例子来说:
12345
从右到左分析各位为0的情况:
最先分析各位5,在它左边是1234,所以当各位为0时,左边可以是0~1234的任何一个数,此时有1234种情况
接下来十位4,在它左边是123,右边可以是0~9的任何一个数,此时为123×10种情况
可以发现每一位的情况数为left×10^i(i为右边的数字个数)
注意:如果该位的数字时0的话,左边的数得减1,但是也别忘了加上右边的数。
比如说:12304 就是122×10+5
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
using namespace std; long long n,m; long long solve(long long n)
{
if(n<) return ;
long long ans=,right=,x=;
while(n>=)
{
long long now=n%;
n/=;
if(now) ans+=n*x;
else ans+=(n-)*x+right+;
right=now*x+right;
x*=;
}
return ans;
} int main()
{
//freopen("D:\\input.txt","r",stdin);
while(~scanf("%lld%lld",&n,&m))
{
if(n==- && m==-) break;
printf("%lld\n",solve(m)-solve(n-));
}
return ;
}