题目大意:
令conc(a,b)函数得出的结果为将ab拼接得到的数字。
例如:conc(12,23)=1223
a和b不会包括前导0!
接下来,你已知A和B,问有多少对的(a,b)满足
1≤a≤A , 1≤b≤B
a*b+a+b=conc(a,b)
解题思路:
想法题,只需要满足b这个数字每一位全为9,那么等式 a*b+a+b=conc(a,b) 恒成立
因为 a*b+a+b=a*(b+1)+b
b+1为一个首位是1,其余位全为0的数,且长度为b的长度+1
所以a*(b+1)+b相当于a*(Length(b)+1)+b,即满足conc(a,b)的功能
故,只要计算1到B中有多少每一位全为9的数,再乘以A即可(a任取恒满足)
注意,最坏情况下a有1e9种,b有9种,最大的答案为9e9,超出int范围,必须用long long
#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod=1000000007; bool isnine(ll in){ while(in){ if(in%10!=9) return false; in/=10; } return true; } int len(ll in){ int ans=0; do{ in/=10; ans++; }while(in); return ans; } int main(){ ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); ll T,A,B,i,j,k; cin>>T; while(T--){ cin>>A>>B; if(isnine(B)) cout<<A*len(B)<<endl; else cout<<A*(len(B)-1)<<endl; } return 0; }