题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4722
题目大意:给定一个区间,求区间中有多少个满足每位上的数的和是10的倍数。
解题思路:先打表暴力求出前200项符合条件的个数,然后再找规律。
0~9 0 1个
10~19 9 1个
20~-29 18 1个
0~100 10个
0~200 20个
基本规律:r/10-(l-1)/10;只需要找两端点是否在范围内即可
#include<cstdio> #include <iostream> using namespace std; long long is(long long x) { long long k,l,r,ans; l=x/10*10; r=(x/10+1)*10;//cout<<"l="<<l<<",r="<<r<<endl; for(long long i=l;i<r;i++) { k=i;ans=0; while(k!=0) { ans+=k%10; k/=10; //cout<<"k="<<k<<",ans="<<ans<<endl; } if(ans%10==0) {return i;} } } int main() { int t; scanf("%d",&t); for(int ca=1;ca<=t;ca++) { long long a,b,sum; cin>>a>>b; long long l=(a-1)/10,r=(b)/10; sum=r-l; if(is(a-1)<=(a-1)) sum-=1; if(is(b)<=b) sum+=1; //if(a!=0) sum-=1; printf("Case #%d: %lld ",ca,sum); } return 0; }