#include<iostream>
#include<cmath>
using namespace std;
int t,n,m,e2,e5,e10,tign,tig0,zc1,zc2;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--){
cin>>n>>m;
e2=0,e5=0,e10=0,tign=0,tig0=0;
while(n%10==0){
n/=10;
e10++;
}
while(n%2==0){
n/=2;
e2++;
}
while(n%5==0){
n/=5;
e5++;
}
if(e2){
while(pow(5,tign+1)<=m && tign+1<=e2){
tign++;
}
while(pow(5,tign)*pow(10,tig0+1)<=m){
tig0++;
}
int fb=m/(pow(5,tign)*pow(10,tig0));
zc1=pow(10,tign+tig0+e10);
zc2=pow(2,max(0,e2-tign));
cout<<fb*zc1*zc2*n<<"\n";
}
else if(e5){
while(pow(2,tign+1)<=m && tign+1<=e5){
tign++;
}
while(pow(2,tign)*pow(10,tig0+1)<=m){
tig0++;
}
int fb=m/(pow(2,tign)*pow(10,tig0));
zc1=pow(10,tign+tig0+e10);
zc2=pow(5,max(0,e5-tign));
cout<<fb*zc1*zc2*n<<"\n";
}
else cout<<n*m<<"\n";
}
return 0;
}
本人代码较为暴力,主体思路就是把n里的2、5、10给分离出来,很明显2和5之中只会有一个在分离了10之后还有剩余的,然后就给2配5/给5配2,配完后再把剩下的0给分离出来(如果有的话),再有剩下的就用作翻倍。
So,Why WA on text 2?