P7616求调....
  • 板块灌水区
  • 楼主haiqian
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/8/14 23:52
  • 上次更新2024/8/15 09:56:13
查看原帖
P7616求调....
679630
haiqian楼主2024/8/14 23:52

rt,

P7616题面

评测记录

样例都过了,检查了一下也没有什么逻辑问题

求dalao们指点...

所有思路都在注释

#include<iostream>
#include<string>
using namespace std;
long long a[1005] = {},b[1005] = {};

long long gcd(long long x,long long y){//最大公因数
	if(y==0) return x;
	else return gcd(y,x%y);
}

long long aans=1,bans=1,allans=1;
string allcnt,ansstr;//allcnt存放答案(未经过%mod),ansstr用来判断最后输出几个0
bool mark=0;//mark用来标记答案是否超过9位
long long mod = 1000000000;//这里为了如果超过9位,取后9位
int main(){
	//输入
	int n,m;
	cin>>n;
	for(int i=1;i<=n;++i){
		cin>>a[i];
	}
	cin>>m;
	for(int i=1;i<=m;++i){
		cin>>b[i];
	}
	
	//开始计算
	for(int i=1;i<=n;++i){
		aans %= mod;//同余定理
		aans *= (a[i]%mod);
		if(mark==0){//如果没到9位
			allans *= a[i];//乘上去
			allcnt = to_string(allans);//long long转字符串
			if(allcnt.length()>9) mark = 1;//如果超过9,标记
		}
		aans %= mod;
	}
	for(int i=1;i<=m;++i){//同上
		bans %= mod;
		bans *= (b[i]%mod);
		if(mark==0){
			allans *= b[i];
			allcnt = to_string(allans);
			if(allcnt.length()>9) mark = 1;
		}
		bans %= mod;
	}
	int ans = gcd(aans,bans)%mod;//算出答案
	ansstr = to_string(ans);//转字符串
	//这里因为答案%mod,保留了后9位,所以只要不足9位并且真实超过,前面必定是0占位(不是0 long long无法忽视)
	if(mark==1 && ansstr.length()<9){//如果真实答案超过9位 && ans不足9位(前面有0)
		for(int i=1;i<=9-ansstr.length();++i){//输出0
			cout<<"0";
		}
	}
	cout<<ans<<"\n";//输出答案
	return 0;
}
2024/8/14 23:52
加载中...