最简分数
【题目描述】
给定若干组分数 , 将每组分数的和化简后输出 , 例如 : \(\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;
}