题目:https://vjudge.net/problem/CodeForces-1288B
题意:给出A、B,求出a、b的对数满足1<=a<=A、1<=b<=B且 a * b + a + b = conc(a,b),其中conc(a,b)等于a和b的数字合并得到的数,例如a=12,b=10,则conc(a,b)=1210。
分析:数学题。从题意可以得到conc(a,b)=a*1eN+b,其中1eN为10的N次方。即a * b + a + b=a*1eN + b,整理得到 b+1=1eN。也就是说b一定为10的某个次方减去1,而a随意。故我们只需知道小于等于B的数中有多少个能由9组成,再乘以A便是答案。
1 #include <stdio.h> 2 int check(long long t){ 3 int x; 4 while(t>0){ 5 x=t%10; 6 t/=10; 7 if(x!=9)return 0; 8 } 9 return 1; 10 } 11 int main(void){ 12 int t; 13 scanf("%d",&t); 14 while(t--){ 15 long long a,b; 16 scanf("%lld %lld",&a,&b); 17 int n=0; 18 long long k=b; 19 while(k>0){ 20 k/=10; 21 n++; 22 } 23 if(check(b))printf("%lld ",a*n); 24 else printf("%lld ",a*(n-1)); 25 } 26 return 0; 27 }