Acwing 338. 计数问题
给定两个整数 aa 和 bb,求 aa 和 bb 之间的所有数字中 0∼90∼9 的出现次数。
例如,a=1024,b=1032a=1024,b=1032,则 aa 和 bb 之间共有 99 个数如下:
1024 1025 1026 1027 1028 1029 1030 1031 1032
其中 0
出现 1010 次,1
出现 1010 次,2
出现 77 次,3
出现 33 次等等…
#include<bits/stdc++.h> using namespace std; int power10(int x) { int res=1; while(x--) res=res*10; return res; } int get(vector<int>num,int l,int r) { int res=0; for(int i=l;i>=r;i--) res=res*10+num[i]; return res; } int count(int n,int x) { if(!n) return 0; vector<int>num; while(n) num.push_back(n%10),n/=10; n=num.size(); int res=0; for(int i=n-1-!x;i>=0;i--) { if(i<n-1) { res+=get(num,n-1,i+1)*power10(i); if(!x) res-=power10(i); } if(num[i]==x) res+=get(num,i-1,0)+1; else if(num[i]>x) res+=power10(i); } return res; } int main(){ int a,b; while(cin>>a>>b,a||b) { if(a>b) swap(a,b); for(int i=0;i<=9;i++) { printf("%d ",count(b,i)-count(a-1,i)); } printf("\n"); } return 0; }
标签:aa,10,return,int,res,num,DP,数位 From: https://www.cnblogs.com/mrkou/p/16754337.html