P1572 计算分数 题解
这也是本蒟蒻洛谷开专栏后第一次写题解。这题对于学历的要求是比较低的,只要上过小学就足以应付分数的运算,我选择的方法是将这个式子分成多个分数输入,就因为输入我卡了整整六次。
只需要每次输入都加入结果的分数中去,唯一要注意的是每一次加入结果后都要约分使分子与分母互质,以防溢出导致结果错误,然后就是要判断答案的合法性,防止出现分子分母都是负数等等情况,输出答案即可。
Code
#include<bits/stdc++.h>//万能头最好力
using namespace std;
int z,m,zans,mans=1;
char op;//没啥用 '/'
int main(){
while(cin>>z>>op>>m){//把式子拆解为多个分数
zans=z*mans+m*zans,mans=m*mans;//计入结果
int gcd=__gcd(zans,mans);//最大限度的约分就是除以最大公约数
zans/=gcd,mans/=gcd;//约分
}
if(zans<0&&mans<0)zans=abs(zans),mans=abs(mans);//注意不能直接abs,只有都为负数时才需要转为正数
else if(zans>0&&mans<0)mans=abs(mans),printf("-");//分子为正数,分母为负数
else if(zans<0&&mans>0)zans=abs(zans),printf("-");//分子为负数,分母为正数
if(zans==0)cout<<0;//分子为0则该分数=0
else if(mans==1)printf("%d",zans);//分母为1即化简直接输出分子
else cout<<zans<<"/"<<mans;//正常输出
return 0;//华丽结束~~~
}