L1-009 N个数求和(包含样例分析)

本题的意图是进行分数加减法,那么就按照平时的分数通分的方式进行运算。

读取完所有的数以后进行数的处理,首先判断分子是不是0,如果是的话说明最终结果是0,输出即可。

如果不是0,那么只需先输出整数部分,在判断需不需要输出小数部分,如果需要则进行约分(即除以最小公因数)。

有一个样例是最终结果为0的,如    2 -2/3 2/3

最后一个样例可能会出现浮点错误,是因为求gcd的时候对0取余了,3%0是错误的。

#include
#include
using namespace std;
void f(long int& sa,long int& sb,long int a,long int b){//以sa和sb作为最终分子和最终分母,直接修改
  sa = sa*b + sb*a;
  sb = sb*b;//通分
}
void gcd(long int &a,long int &b){//直接修改a和b的值
  long int r;
  long int M = max(a,b), m = min(a,b);
  while(r=M%m){
    M=m;
    m=r;
  }
  a/=m;
  b/=m;
}
int main(){
  int n;
  scanf("%d",&n);
  long int sa,sb,a,b;
  scanf("%ld/%ld",&sa,&sb);
  for(int i=1; i

你可能感兴趣的:(gplt)