//事实证明只要自己有思路,自己早晚会写出来的!
//方法:
//第一步:找出给出数各个位数字和,求这个和余10的余数,让这个和减去余数后再除以10,得到从1到这个数一共有多少个满足条件;
//例如947满足条件,从1到这个数一共94个,方法947/10,但如果是946,这个方法就是错的,所以不能简单的除10
//可以发现947 数字和20 % 10 =0,946 数字和 19 % 10 = 9, 946-9 = 937 ,937 /10才是正确答案,只要满足条件和的余数肯定是0;
//只要不满足条件就需要减 , 例如948 和21, 余10 为1, 948 - 1= 947 ,947 / 10 还是94 正确!
//所以这个方法可行!
//其次就是判断被减数,例如19 28 正确的应该输出2, 然而如果按照上面的方法求解后直接相减,结果是1,显然不对
//方法:
//第一步:找出给出数各个位数字和,求这个和余10的余数,让这个和减去余数后再除以10,得到从1到这个数一共有多少个满足条件;
//例如947满足条件,从1到这个数一共94个,方法947/10,但如果是946,这个方法就是错的,所以不能简单的除10
//可以发现947 数字和20 % 10 =0,946 数字和 19 % 10 = 9, 946-9 = 937 ,937 /10才是正确答案,只要满足条件和的余数肯定是0;
//只要不满足条件就需要减 , 例如948 和21, 余10 为1, 948 - 1= 947 ,947 / 10 还是94 正确!
//所以这个方法可行!
//其次就是判断被减数,例如19 28 正确的应该输出2, 然而如果按照上面的方法求解后直接相减,结果是1,显然不对
//所以这一步就是判断这个临界条件 只要被减数和余10为0, 相减后需加1;否则直接相减
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; __int64 getx(__int64 a){ __int64 b = 0, s = a; while(a!=0){ b += a%10; a = a/10; } return (s-b%10)/10; } int main(){ int n; __int64 a, b, ans, d, cp; int k=0; while(scanf("%d", &n) == 1){ while(n--){ k++; d = 0; scanf("%I64d%I64d", &a, &b); cp = a; while(a!=0){ d += a%10; a = a/10; } if(d%10) ans = getx(b) - getx(cp); else ans = getx(b) - getx(cp) + 1; printf("Case #%d: %I64d\n", k, ans); } } return 0; }