CSU1619: Con + tin / (ued + Frac / tions)

Description

CSU1619: Con + tin / (ued + Frac / tions)_第1张图片

Input

Output

Sample Input

4 3
5 1 1 2
5 2 2
0 0

Sample Output

Case 1:
11
0 5
30 4 6
1 27

HINT

Source



题意:根据给定的数字算出r1,r2,然后对于r1,r2的四则运算我们要用一系列的整数来表示出来
思路:首先不难想到对于r1,r2我们先用分子分母表示出来,然后再对其进行四则运算,四则运算考虑了一下0的情况,最关键的是整数部分的处理,对于小数部分不断的循环去除便可以了。。。
例如相加得到77/5 = 15.4
首先输出15,然后剩下0.4
于是1/0.4=2.5,输出2
还剩下0.5,于是1/0.5,输出2,输出完毕,这一部分就是看余数与除数的关系

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<math.h>
#define esp  1e-12
#define LL long long
#define gcd(a,b) __gcd(a,b)
using namespace std;
LL a[25];

void Print(LL a,LL b)
{
    LL gg = gcd(a, b);
    a /= gg;
    b /= gg;
    if (b < 0)
    {
        a *= -1;
        b *= -1;
    }
    LL tmp = (a % b + b) % b;
    LL a0 = (a - tmp) / b;
    printf("%lld", a0);
    a=tmp;

    swap(a,b);
    while(b)
    {
        tmp=a/b;
        printf(" %lld",tmp);
        a=a%b;
        swap(a,b);
    }
    printf("\n");
}


int main()
{
    int Ca=1;
    int n1,n2;
    LL fm1,fm2,fm3,fz1,fz2,fz3;
    while(scanf("%d%d",&n1,&n2),(n1!=0&&n2!=0))
    {
        for(int i=0; i<n1; i++)
        {
            scanf("%lld",&a[i]);
        }
        if(n1==1)
        {
            fm1=0;
            fz1=a[0];
        }
        else
        {
            fm1=a[n1-1];
            fz1=1;
            for(int i=n1-2; i>0; i--)
            {
                LL tmp=fm1;
                fm1=fz1+a[i]*fm1;
                fz1=tmp;
            }
            fz1=fz1+a[0]*fm1;
        }


        for(int i=0; i<n2; i++)
        {
            scanf("%lld",&a[i]);
        }
        if(n2==1)
        {
            fm2=0;
            fz2=a[0];
        }
        else
        {
            fm2=a[n2-1];
            fz2=1;
            for(int i=n2-2; i>0; i--)
            {
                LL tmp=fm2;
                fm2=fz2+a[i]*fm2;
                fz2=tmp;
            }
            fz2=fz2+a[0]*fm2;
        }

        printf("Case %d:\n",Ca++);
        /****************************************/
//+
        if(fm1==0||fm2==0)
        {
            if(fm1==0&&fm2!=0)
            {
                Print(fz1*fm2+fz2,fm2);
            }
            if(fm1!=0&&fm2==0)
            {
                Print(fz2*fm1+fz1,fm1);
            }
            if(fm1==0&&fm2==0)
                printf("%lld\n",fz1+fz2);
        }
        else
        {
            Print(fz1*fm2+fz2*fm1,fm1*fm2);
        }


        /*************************************************/
//-
        if(fm1==0||fm2==0)
        {
            if(fm1==0&&fm2!=0)
            {
                Print(fz1*fm2-fz2,fm2);
            }
            if(fm1!=0&&fm2==0)
            {
                Print(fz1-fz2*fm1,fm1);
            }
            if(fm1==0&&fm2==0)
                printf("%lld\n",fz1-fz2);
        }
        else
        {
            Print(fz1*fm2-fz2*fm1,fm1*fm2);
        }
        /***********************************************************/
//*
        if(fm1==0||fm2==0)
        {
            if(fm1==0&&fm2!=0)
            {
                Print(fz1*fz2,fm2);
            }
            if(fm1!=0&&fm2==0)
            {
                Print(fz1*fz2,fm1);
            }
            if(fm1==0&&fm2==0)
                printf("%lld\n",fz1*fz2);
        }
        else
        {
            Print(fz1*fz2,fm1*fm2);
        }
        /****************************************************/
// /
        if(fm1==0||fm2==0)
        {
            if(fm1==0&&fm2!=0)
            {
                Print(fz1*fm2,fz2);
            }
            if(fm1!=0&&fm2==0)
            {
                Print(fz1,fm1*fz2);
            }
            if(fm1==0&&fm2==0)
                Print(fz1,fz2);
        }
        else
        {
            Print(fz1*fm2,fm1*fz2);
        }

    }
    return 0;
}


你可能感兴趣的:(CSU)