题意:如果一个数 他每一个位之和能整除10 称之为GoodNumber,求区间 [a,b]的GoodNumber数(次奥我英文不好,居然以为是因子..去看了求因子和的文章....)
思路:
1.找规律,每一百个数里面有10个GoodNumber
2.实际上[0,9][10,19]....以整除10为开头的数与他后面9个数的区间里面 一定有一个是GoodNumber,但是[1,18]虽然有18个数,但是一个GoodNumber也没
3.先求[0,a][0,b]的GoodNumber数,再相减两个区间得到[a,b]间的数
知识点:无
/*Code By Aquariuslt*/
/*HDU 4722 Good Numbers*/
#include<iostream>
#include<stdio.h>
#include<string>
#include<algorithm>
#include<string.h>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#include<limits.h>
#include<math.h>
#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define FORD(i,a,b) for(int i=(a);i<=(b);i++)
#define REP(i,b) FOR(i,0,b)
#define CLR(a) memset(a,0,sizeof(a))
using namespace std;
#define maxn 100010
#define ll __int64
ll su(ll n) {
ll res=0;
while(n>0) {
res+=(n%10);
n=n/10;
}
//printf("%I64d:%I64d\n",n,res);
return res;
}
ll cal(ll n){
ll temp=n/100;
ll res=temp*10;
for(ll i=temp*100;i<=n;i++){
if(su(i)%10==0)res++;
}
return res;
}
int main() {
int t;
scanf("%d",&t);
REP(ti,t) {
ll a,b;
scanf("%I64d %I64d",&a,&b);
ll op=cal(b)-cal(a-1);
printf("Case #%d: %I64d\n",ti+1,op);
}
return 0;
}