uva-11038_计数 思路 代码

好像没什么很好写的,稍微记一下类题做法

题目大意: 给出两个数n < m ,要求从n写至m共有多少个0.

思路

假定函数fun(x)计算由0至x的0数量,那么题目要求即f(m)-f(n-1).
那么要求既是设计f函数.
可以将x拆分为左右两部分,以中间一位为0情况,枚举左右两边可能的情况.

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36


#include<iostream>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
#include<string>
#include<math.h>
#include<map>
#include<stack>
using namespace std;
typedef long long ll;
const double PI = acos(-1.0);
const double eps=1e-4;
const int N=1000007;
ll (ll a){
if(a<0)return 0;
ll sum=1,b=0,flag=1;
while(a>=10){
ll mid=a%10;
a/=10;
if(mid>0)sum+=a*flag;
else sum+=(a-1)*flag+(b+1);
b+=mid*flag;
flag*=10;
}
return sum;
//这里a为左边,b为右边,mid为中间位
}
int main(){
ll n,m;
while(scanf("%lld %lld",&n,&m)!=EOF&&n!=-1&&m!=-1){
printf("%lldn",coun(m)-coun(n-1));
}
return 0;
}