PAT-A 1081. Rational Sum (20)
2017-03-25 11:37
477 查看
题目链接在此。
典型的分数加法运算。
分数的四则运算相关可以看这里。
典型的分数加法运算。
分数的四则运算相关可以看这里。
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; struct fraction{ long long up, down; }num[105]; //求两个数的最大公约数 long long gcd(long long a, long long b){ if(b == 0) return a; else gcd(b,a%b); } //化简一个分数 fraction reduction(fraction f){ //由于题目已经保证负号一定出现在分子,所以下面第一个if可以省略; //由于在输出的时候判断了分子为0 的情况,所以第二个if可以省略 /* if(f.down < 0){ //分母为负数 f.up = -f.up; //分子分母取为相反数 f.down = -f.down; } if(f.up == 0){ //分子为零 f.down = 1; }else{ //分母不为零,进行约分 long long d = gcd(abs(f.up), abs(f.down)); //求分数f的分子分母绝对值的最大公约数 ,记得是绝对值 f.up /= d; //分子除以最大公约数 f.down /= d; //分母除以最大公约数 } */ long long d = gcd(abs(f.up), abs(f.down)); //求分数f的分子分母的最大公约数 f.up /= d; //分子除以最大公约数 f.down /= d; //分母除以最大公约数 return f; } //分数加法 fraction add(fraction a, fraction b){ fraction res; res.up = a.up*b.down + b.up*a.down; res.down = a.down*b.down; return reduction(res); } int main(){ int n; scanf("%d",&n); fraction res; //用来保存结果 res.up = 0, res.down = 1; //初始化res for(int i = 0; i < n; i++){ scanf("%lld/%lld",&num[i].up, &num[i].down); res = add(res,num[i]); } //按要求输出 if(res.up == 0){ //如果分子为0 printf("0\n"); //那么结果为0,直接输出0即可 }else if(res.down == 1){ //如果分母为1 printf("%lld\n",res.up); //直接输出分母即可 }else if(res.up > res.down){ //分子大于分母,此时是一个带分数 printf("%lld ",res.up/res.down); //输出带分数的整数部分 printf("%lld/%lld\n",res.up%res.down, res.down); //带分数的分数部分 } else{ //真分数 printf("%lld/%lld\n",res.up,res.down); //正常输出 } return 0; }
相关文章推荐
- PAT (Advanced Level) 1081. Rational Sum (20) 分数求和,辗转相除法求gcd
- PAT 1081. Rational Sum(20)
- 【PAT】1081. Rational Sum (20)
- 浙江大学PAT_甲级_1081. Rational Sum (20)
- [PAT]1081 Rational Sum (20)
- PAT (Advanced Level) Practise 1081 Rational Sum (20)
- PAT Advanced Level 1081. Rational Sum (20)
- PAT 1081. Rational Sum (20)
- 【PAT】【Advanced Level】1081. Rational Sum (20)
- PAT 1081. Rational Sum (20)
- PAT 1081. Rational Sum (20)
- PAT 甲级 1081. Rational Sum (20)
- PAT 1081. Rational Sum (20)(分数加法)(待修改)
- PAT (Advanced) 1081. Rational Sum (20)
- 1081. Rational Sum (20)-PAT甲级真题
- PAT (Advanced Level) 1081. Rational Sum (20)
- pat甲1081. Rational Sum (20)
- 1081. Rational Sum (20) PAT甲级
- PAT (Advanced) 1081. Rational Sum (20)
- PAT 1081. Rational Sum (20) GCD