我的做法可能很弱智
给定一个数x>0算通过每一位零出现次数的统计,算出所有的0的次数(从1到X)
举一个例子
2508这个数
首先考虑个位数
250X X=0;一共有250-1+1个
25X8 X=0;一共有258-10+1个
2X08 X=0;注意并不只有208-100+1中可能,我之前就错在这里了,因为最大2508,所以2099-2009这百位的零我就没有考虑到,所以这里的0有299-100+1个
于是题目就做出来了
输入一个a b
a<b
a==0时
b统计出零的个数然后加1(0)的个数
否则从a 到 b的0的个数则是从1到b的0个数减去从1到a-1的零的个数
a<10的情况我害怕出错就分开写了,所以整个程序有些长
下面就是我笨拙的代码
1
#include <iostream>
2
#include <string>
3
#include <cstdio>
4
#include <cstdlib>
5
#include <cmath>
6
using namespace std;
7
long long aarray[10]=
{0};
8
long long barray[10]=
{0};
9
long long diff[10]=
{0};
10
char tempstr[10] = "";
11
12
13
int calc(std::string str,int i)
14

{
15
//str.erase()
16
if(i==(str.size()-1)) return 0;
17
long long sum=0,len=str.size();
18
int needminus = int(pow(10.0,i));
19
//if(i!=0)str[len-i-2]+=(str[len-i-1]-'0');//new add
20
if(str[len-i-1]=='0')
21
{
22
str.erase(len-i-1,1);
23
}
24
else
25
{
26
str.erase(len-i-1,i+1);
27
str.append(i,'9');
28
}
29
for(int i=0;i<str.size();i++)
30
{
31
sum=sum*10+(str[i]-'0');
32
}
33
sum-=needminus;
34
sum+=1;
35
return sum;
36
}
37
38
int main()
39

{
40
unsigned int a,b;
41
std::string tempstring;
42
int add;
43
while(scanf("%u %u",&a,&b))
44
{
45
add=0;
46
47
if(a==0)
48
add=1;
49
else
{
50
add=0;
51
a--;
52
}
53
if(a==-2)
54
break;
55
int alen,blen;
56
if(a<10)
57
{
58
aarray[0]=0;
59
}
60
else
61
{
62
_i64toa(a,tempstr,10);
63
alen = strlen(tempstr);
64
tempstring.assign(tempstr);
65
for(int i=0;i<alen;i++)
66
{
67
aarray[i]=calc(tempstring,i);
68
}
69
}
70
_i64toa(b,tempstr,10);
71
blen = strlen(tempstr);
72
tempstring.assign(tempstr);
73
for(int i=0;i<blen;i++)
74
{
75
barray[i]=calc(tempstring,i);
76
}
77
for(int i=0;i<blen;i++)
78
{
79
diff[i]=barray[i]-aarray[i];
80
}
81
long long sum=0;
82
for(int i=0;i<blen;i++)
83
{
84
sum+=diff[i];
85
}
86
87
cout<<sum+add<<endl;
88
memset(aarray,0,sizeof(long long)*10);
89
memset(barray,0,sizeof(long long)*10);
90
memset(diff,0,sizeof(long long)*10);
91
}
92
}