Why WA on text 2
查看原帖
Why WA on text 2
815807
zouyuhao20120225楼主2024/5/14 12:58
#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?

2024/5/14 12:58
加载中...