c++---天梯赛---N个数求和

★题目:

★难点:要求只能以有理数和分数去输出结果。

★分析:可以对输入的数据进行通分处理,随后把结果按格式输出。

★代码:

#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
long gy(long n,long m)                  //递归求最大公约数
{
    long temp;
    if(n<m) temp=n,n=m,m=temp;
    if(m==0)
        return n;
    else
        return gy(m,n%m);
}
int main()
{
    long n,i,a,b,c,d,x,y,t;
    cin>>n;
    scanf("%ld/%ld",&a,&b);
    for(int i=1;i<n;i++)
    {
        scanf("%ld/%ld",&c,&d);
        if(a!=0)                                //对输入的第一个数进行分析
        {
            x=a*d+c*b;
            y=b*d;
            t=gy(abs(x),y);             
            a=x/t;
            b=y/t;                      
        }                                       //实现通分操作
        else
        {
            x=c;
            y=d;
            t=gy(abs(x),y);
            a=x/t;
            b=y/t;
        }                                       //对首位数为0的式子实现通分
    }
    if(abs(a)>b&&a%b!=0)
    {
        cout<<a/b<<" "<<a%b<<"/"<<b<<endl;      //结果大于1且不为整数
    }
    else if(a%b==0)                             //包含a==0的情况
    {
        cout<<a/b<<endl;                        //结果为整数
    }
    else
        cout<<a<<"/"<<b<<endl;                  //结果为小于1的分数

}

★测试结果:

 

★   The golden age is before us , not behind us.  

               ------(Mark Twain)

posted on 2018-01-23 16:04  追梦者~  阅读(1497)  评论(0)    收藏  举报