社区讨论
70pts 马风良好 求条
P1572计算分数参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhj2ztyh
- 此快照首次捕获于
- 2025/11/03 19:53 4 个月前
- 此快照最后确认于
- 2025/11/03 19:53 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
string s;int l,k;char op;
struct frac{
int num,den;
}a[3];
inline int read() {
int n=0,f=1;
char ch=getchar();
while(!isdigit(ch)) {
if(ch=='-') f=-1;
ch=getchar();
}
while(isdigit(ch)) {
n=n*10+ch-'0';
ch=getchar();
}
return f*n;
}
inline void write(int n) {
if(n<0) putchar('-'),n=-n;
if(n<10) putchar(n+'0');
else write(n/10),putchar(n%10+'0');
}
inline int lcm(int a,int b) {
return a/__gcd(a,b)*b;
}
int main() {
cin>>s;
if(s.size()==3) {
int num=s[0]-'0',den=s[2]-'0',n=abs(__gcd(num,den));
num/=n,den/=n;
write(num);
if(den!=1) putchar('/'),write(den);
return 0;
}
if(s[0]=='-') {
a[++l].num=-(s[1]-'0');
a[l].den=s[3]-'0';
k=4;
}
else if(s[2]=='-') {
a[++l].num=-(s[0]-'0');
a[l].den=s[3]-'0';
k=4;
}
else {
a[++l].num=s[0]-'0';
a[l].den=s[2]-'0';
k=3;
}
for(int i=k;i<s.size();i++) {
if(s[i]=='/') {
a[++l].num=s[i-1]-'0';
if(s[i+1]!='-') a[l].den=s[i+1]-'0',i++;
else a[l].den=-(s[i+2]-'0'),s[i+1]=' ',i+=2;
}
if(s[i]=='+'||s[i]=='-') op=s[i];
if(l==2) {
frac res;
int n=abs(lcm(a[1].den,a[2].den));
a[1].num*=n/a[1].den,a[2].num*=n/a[2].den;
if(op=='+') res.num=a[1].num+a[2].num;
else if(op=='-') res.num=a[1].num-a[2].num;
res.den=n;
int m=abs(__gcd(res.num,res.den));
res.num/=m,res.den/=m;
a[l=1]=res;
}
}
int n=abs(__gcd(a[1].num,a[1].den));
a[1].num/=n,a[1].den/=n;
if(a[1].den<0) a[1].den=-a[1].den,a[1].num=-a[1].num;
if(a[1].num!=0) write(a[1].num);
if(a[1].den!=1) putchar('/'),write(a[1].den);
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...