最简分数

【题目描述】

给定若干组分数 , 将每组分数的和化简后输出 , 例如 : \(\frac{7}{9}+\frac{8}{9}=\frac{15}{9}\)化简后是\(\frac{5}{3}\) , \(\frac{9}{3}\)化简后是\(3\)

【输入格式】

第一行输入正整数 \(n\) , 表示\(n\)组分数。

接下来\(n\)行 , 第\(i\)行有两对数\(a_{i1}\)\(b_{i1}\)以及\(a_{i2}\)\(b_{i2}\), 每对数据分别代表分数的 分子 和 分母 。

【输出格式】

输出\(n\)行 , 代表\(n\)组分数化简后的结果。

【输入输出样例】

frac.in frac.out
2 7 9 8 9 5 3 4 3 5 3 3

【数据范围与约定】

对于10%的数据, \(n==1\),且 每对分数\(b_i==1\)

对于70%的数据, \(1<=n<=10^4\),每对分数\(1<=a_i,b_i<=10^4\)

对于100%的数据, \(1<=n<=5*10^4\),每对分数\(1<=a_i,b_i<=10^8\)

【正确思路】

  • 根据小学二年级的知识,可以得出\(\frac{b}{a}+\frac{d}{c}=\displaystyle \frac{c*b+a*d}{a*c}\)

  • 可以用辗转相除法AC此题

ll gcd(ll a,ll b){
	return b==0? a:gcd(b,a%b);
}

【我的错因】

  • 直接报错,无法分析
C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib\crt2.o	In function `__tmainCRTStartup':
254		C:\crossdev\src\mingw-w64-v3-git\mingw-w64-crt\crt\crtexe.c	(.text+0x1fe): relocation truncated to fit: R_X86_64_PC32 against symbol `__imp_Sleep' defined in .idata$5 section in C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib/libkernel32.a(dgnms01196.o)
281		C:\crossdev\src\mingw-w64-v3-git\mingw-w64-crt\crt\crtexe.c	(.text+0x286): relocation truncated to fit: R_X86_64_PC32 against symbol `__imp_SetUnhandledExceptionFilter' defined in .idata$5 section in C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib/libkernel32.a(dgnms01183.o)
289		C:\crossdev\src\mingw-w64-v3-git\mingw-w64-crt\crt\crtexe.c	(.text+0x2b4): relocation truncated to fit: R_X86_64_PC32 against symbol `__mingw_winmain_hInstance' defined in COMMON section in C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o
315		C:\crossdev\src\mingw-w64-v3-git\mingw-w64-crt\crt\crtexe.c	(.text+0x313): relocation truncated to fit: R_X86_64_PC32 against symbol `__mingw_winmain_lpCmdLine' defined in COMMON section in C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o
241		C:\crossdev\src\mingw-w64-v3-git\mingw-w64-crt\crt\crtexe.c	(.text+0x495): relocation truncated to fit: R_X86_64_PC32 against symbol `__imp_GetStartupInfoA' defined in .idata$5 section in C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib/libkernel32.a(dgnms00627.o)
C:\Users\Student\AppData\Local\Temp\ccicqvsJ.o	frac.cpp:(.text+0x81): relocation truncated to fit: R_X86_64_PC32 against symbol `__imp___iob_func' defined in .idata$5 section in C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib/libmsvcrt.a(dgrds00083.o)
C:\Users\Student\AppData\Local\Temp\ccicqvsJ.o	frac.cpp:(.text+0xa0): relocation truncated to fit: R_X86_64_PC32 against symbol `__imp___iob_func' defined in .idata$5 section in C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib/libmsvcrt.a(dgrds00083.o)
C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\libstdc++.a(ios_init.o)	ios_init.cc:(.text$_ZNSt8ios_base4InitC2Ev+0x3c): relocation truncated to fit: R_X86_64_PC32 against symbol `__imp___iob_func' defined in .idata$5 section in C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib/libmsvcrt.a(dgrds00083.o)
C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\libstdc++.a(ios_init.o)	ios_init.cc:(.text$_ZNSt8ios_base15sync_with_stdioEb+0xc0): relocation truncated to fit: R_X86_64_PC32 against symbol `__imp___iob_func' defined in .idata$5 section in C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib/libmsvcrt.a(dgrds00083.o)
C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\libstdc++.a(basic_file.o)	basic_file.cc:(.text$_ZN12_GLOBAL__N_1L6xwriteEiPKcx+0xd): relocation truncated to fit: R_X86_64_PC32 against symbol `__imp__errno' defined in .idata$5 section in C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib/libmsvcrt.a(dgrds00203.o)
C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\libstdc++.a(basic_file.o)	basic_file.cc:(.text$_ZNSt12__basic_fileIcE8sys_openEP6_iobufSt13_Ios_Openmode+0x1b): additional relocation overflows omitted from the output
C:\Users\Student\Desktop\collect2.exe	[Error] ld returned 1 exit status

【错误代码】

#include<bits/stdc++.h>
using namespace std;
int zxgbs(int a,int b) {
	for(int i=2; i<max(a,b); i++) {
		if(a%i==0&b%i==0) {
			return i;
		}
	}
	return 0;
}
struct node {
	int z1,m1,z2,m2;
	int z_j,m_j;
	void h() {
		m_j=m1*m2;
		z_j=z1*m2+z2*m1;
	}
	void hj() {
		if(m_j>z_j) {
			if(m_j%z_j==0) {
				cout<<m_j/z_j<<' '<<1<<endl;
			} else if(zxgbs(z_j,m_j)!=0) {
				cout<<z_j/zxgbs(z_j,m_j)<<' '<<m_j/zxgbs(z_j,m_j)<<endl;
			}
		}
		if(m_j<z_j) {
			if(z_j%m_j==0) {
				cout<<z_j/m_j<<endl;
			} else if(zxgbs(z_j,m_j)!=0) {
				cout<<z_j/zxgbs(z_j,m_j)<<' '<<m_j/zxgbs(z_j,m_j)<<endl;
			}
		}
	}
} fs[100000005];
int n;
int main() {
	freopen("frac.in","r",stdin);
	freopen("frac.out","w",stdout);
	cin>>n;
	for(int i=1; i<=n; i++) {
		cin>>fs[i].z1>>fs[i].m1>>fs[i].z2>>fs[i].m2;
	}
	for(int i=1; i<=n; i++) {
		fs[i].h();
	}
	for(int i=1; i<=n; i++) {
		fs[i].hj();
	}
	return 0;
}

【AC代码】

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll gcd(ll a,ll b){
	return b==0? a:gcd(b,a%b);
}
int main(){
	freopen("frac.in","r",stdin);
	freopen("frac.out","w",stdout);
	ll q,a,b,c,d;
	cin>>q;
	while(q--){
		cin>>a>>b>>c>>d;
		ll fz=a*d+b*c , fm=b*d;
		ll GCD=gcd(fz,fm);
		fz=fz/GCD,fm=fm/GCD;
		cout<<fz<<" ";
		if(fm!=1) cout<<fm;
		cout<<endl;
	}
	return 0;
} 
posted @ 2025-07-27 17:29  yangmengcheng1103  阅读(7)  评论(0)    收藏  举报