两种不同的写法,为什么一种能过一种不能过?
求!
AC:
#include<bits/stdc++.h>
using namespace std;
int n,p,q,c,d;
char ch;
int gcd(int a,int b){
if(b==0){
return a;
}
else{
return gcd(b,a%b);
}
}
int flag(int c,int d){
int t=gcd(c,d);
if(t!=1){
c/=t;
d/=t;
}
if(d==1){
cout<<c;
return 0;
}
if(c==d){
cout<<1;
return 0;
}
if(t==1){
cout<<c<<ch<<d;
return 0;
}
}
int main(){
cin>>n;
cin>>c>>ch>>d;
for(int i=2;i<=n;i++){
cin>>p>>ch>>q;
int k=d*q/gcd(d,q);
int k1=k/d;
int k2=k/q;
c=p*k2+k1*c;
d=k;
}
flag(c,d);
return 0;
}
不能过的改了一下flag函数:
#include<bits/stdc++.h>
using namespace std;
int n,p,q,c,d;
char ch;
int gcd(int a,int b){
if(b==0){
return a;
}
else{
return gcd(b,a%b);
}
}
void flag(int c,int d){
int t=gcd(c,d);
if(t!=1){
c/=t;
d/=t;
}
if(d==1){
cout<<c;
return ;
}
if(c==d){
cout<<1;
return ;
}
if(t==1){
cout<<c<<ch<<d;
return ;
}
}
int z;
int main(){
cin>>n;
cin>>c>>ch>>d;
for(int i=2;i<=n;i++){
cin>>p>>ch>>q;
int k=d*q/gcd(d,q);
int k1=k/d;
int k2=k/q;
c=p*k2+k1*c;
d=k;
}
flag(c,d);
return 0;
}