AcWing 338. 可读性最好的计数问题题解
原题链接
中等
作者:
MCplayer
,
2021-03-07 22:14:30
,
所有人可见
,
阅读 349
自认为比较清楚的方法,把取0和不取0的情况分开了,之前的题解看下来在可读性上没有使我满意的答案,就把我自己的方法写出来给大家做个参考(参数名起得不太友好,轻喷~)
#include <iostream>
using namespace std;
//1-a中k的个数
int getnum(int a,int k){
int b=0,c=a,i=1,res=0;
//大家仔细看取0的时候 不算前导零因此观测位前的值c都比不取0时少一
if(k==0){
while(c/10!=0){
b=c%10;
c/=10;
//取不取0有区别的步骤
if(b>k) res+=c*i;
else res+=(c-1)*i+(a%i)+1;
i*=10;
}
}else{
while(c!=0){
b=c%10;
c/=10;
//取不取0有区别的步骤
if(b>k) res+=(c+1)*i;
else if(b<k) res+=c*i;
else res+=c*i+(a%i)+1;
i*=10;
}
}
return res;
}
int main(){
int a,b;
while(cin >> a >> b,a||b){
if(b<a) swap(a,b);
for(int i=0;i<10;i++)
cout << getnum(b,i)-getnum(a-1,i) << " ";
cout << endl;
}
return 0;
}