比赛 202110省实验桐柏一中普及组联赛 评测结果 ETTTTETTAE
题目名称 分数约分 最终得分 10
用户昵称 增强型图元文件 运行时间 7.009 s
代码语言 C++ 内存使用 11.82 MiB
提交时间 2021-10-18 20:55:40
显示代码纯文本
#include <bits/stdc++.h>
#include <cmath>
#define e 0.000000000001
using namespace std;
struct ld{
	int nums[1010];
	ld(){
		
	}
	ld(int x){
		memset(nums,0,sizeof(nums));
		int w=1;
		while(x>0){
			nums[w]=x%10;
			x=x/10;
			w++;
		}
		nums[0]=w;
		while(nums[nums[0]]==0&&nums[0]>1){
			nums[0]--;
		}
	}
	ld(string s){
		nums[0]=s.size();
		for(int i=1;i<=nums[0];i++){
			nums[i]=s[nums[0]-i]-'0';
		}
	}
	ld operator-(const ld b){
		ld ma=*this;ld mb=b;
		if(mb>ma){
			ma=b;mb=*this;
		}
		for(int i=1;i<=ma.nums[0];i++){
			if(ma.nums[i]-mb.nums[i]<0){
				ma.nums[i]+=10;
				ma.nums[i+1]--;
			}
			ma.nums[i]=ma.nums[i]-mb.nums[i];
		}
		while(ma.nums[ma.nums[0]]==0&&ma.nums[0]>1){
			ma.nums[0]--;
		}
		return ma;
	}
	bool operator>(const ld b) const{
		if(this->nums[0]>b.nums[0]){
			return true;
		}
		if(this->nums[0]<b.nums[0]){
			return false;
		}
		for(int i=this->nums[0];i>=1;i--){
			if(this->nums[i]>b.nums[i]){
				return true;
			}else if(this->nums[i]<b.nums[i]){
				return false;
			}
		}
		return false;
	}
	bool operator<(const ld b) const{
		if(this->nums[0]<b.nums[0]){
			return true;
		}
		if(this->nums[0]>b.nums[0]){
			return false;
		}
		for(int i=this->nums[0];i>=1;i--){
			if(this->nums[i]<b.nums[i]){
				return true;
			}else if(this->nums[i]>b.nums[i]){
				return false;
			}
		}
		return false;
	}
	bool operator>=(const ld b){
		if(this->nums[0]>b.nums[0]){
			return true;
		}
		if(this->nums[0]<b.nums[0]){
			return false;
		}
		for(int i=this->nums[0];i>=1;i--){
			if(this->nums[i]>b.nums[i]){
				return true;
			}else if(this->nums[i]<b.nums[i]){
				return false;
			}
		}
		return true;
	}
	ld operator/(const ld b){
		ld ma=*this;
		int res=0;
		while(ma>=b){
			ma=ma-b;
			res++;
		}
		return ld(res);
	}
	void print(){
		for(int i=nums[0];i>=1;i--){
			cout<<nums[i];
		}
	}
};
struct descc{
	ld a,b;
	descc(){
		
	}
	descc(ld sa,ld sb){
		a=sa;b=sb;
		ld g=gcd(max(a,b),min(a,b));
		a=a/g,b=b/g;
	}
	ld gcd(ld x,ld y){
		ld tx(0);
		return y>tx ? gcd(y,x-y) : x;
	}
};
int main(int argc, char** argv) {
	freopen("yuefen.in","r",stdin);
	freopen("yuefen.out","w",stdout);
	string a,b;
	cin>>a>>b;
	ld la(a),lb(b);
	descc dc(la,lb); 
	dc.a.print();
	cout<<" ";
	dc.b.print();
	return 0;
}