B1034 有理數(shù)四則運(yùn)算 (20分)

// B1034 有理數(shù)四則運(yùn)算 (20分).cpp : 此文件包含 "main" 函數(shù)。程序執(zhí)行將在此處開(kāi)始并結(jié)束。
//
learn && wrong:
1、公約數(shù)要絕對(duì)值
2、化簡(jiǎn)是if,if_else
3、輸出是if_else_else if

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>

using namespace std;

typedef long long ll;
ll gcd(ll a, ll b) {
    if (b == 0) {
        return a;
    }
    else {
        return gcd(b, a % b);
    }
}

struct Fraction {
    ll up;
    ll down;
}a,b;

Fraction reduction(Fraction result) {   //化簡(jiǎn)
    if (result.down < 0) {
        result.up = -result.up;
        result.down = -result.down;
    }
    if (result.up == 0) {
        result.down = 1;
    }
    else {
        ll d = gcd(abs(result.up), abs(result.down));
        result.up = result.up / d;
        result.down = result.down / d;
    }
    return result;
}

Fraction add(Fraction a, Fraction b) {
    Fraction result;
    result.up = a.up * b.down + a.down * b.up;
    result.down = a.down * b.down;
    return reduction(result);
}

Fraction sub(Fraction a, Fraction  b) {
    Fraction result;
    result.up = a.up * b.down - a.down * b.up;
    result.down = a.down * b.down;
    return reduction(result);
}

Fraction plus1(Fraction a, Fraction b) {
    Fraction result;
    result.up = a.up * b.up;
    result.down = a.down * b.down;
    return reduction(result);
}

Fraction division(Fraction a, Fraction b) {
    Fraction result;
    result.up = a.up * b.down;
    result.down = a.down * b.up;
    return reduction(result);
}

void show(Fraction r) {
    //如果是負(fù)數(shù),如果是0,如果是假分?jǐn)?shù)
    r = reduction(r);
    if (r.up < 0)printf("(");
    if (r.down == 1) printf("%lld", r.up);
    else if (abs(r.up) > r.down) {
        printf("%lld %lld/%lld", r.up / r.down, abs(r.up) % r.down, r.down);
    }
    else {
        printf("%lld/%lld", r.up, r.down);
    }
    if (r.up < 0) printf(")");
    
}

int main()
{
    scanf("%lld/%lld %lld/%lld", &a.up, &a.down, &b.up, &b.down);
    show(a);
    printf(" + ");
    show(b);
    printf(" = ");
    show(add(a, b));
    printf("\n");
    
    show(a);
    printf(" - ");
    show(b);
    printf(" = ");
    show(sub(a, b));
    printf("\n");

    show(a);
    printf(" * ");
    show(b);
    printf(" = ");
    show(plus1(a, b));
    printf("\n");

    show(a);
    printf(" / ");
    show(b);
    printf(" = ");
    if (b.up == 0) printf("Inf");
    else show(division(a, b));
    printf("\n");
    return 0;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在C語(yǔ)言中,五種基本數(shù)據(jù)類(lèi)型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來(lái)閱讀 3,993評(píng)論 0 2
  • 本題要求編寫(xiě)程序,計(jì)算 2 個(gè)有理數(shù)的和、差、積、商。 輸入格式: 輸入在一行中按照 a1/b1 a2/b2 的格...
    初見(jiàn)還是重逢閱讀 510評(píng)論 0 1
  • 7-1 簡(jiǎn)單的猜數(shù)字游戲[1] (4分) 簡(jiǎn)單的猜數(shù)字游戲是預(yù)先設(shè)置一個(gè)100以?xún)?nèi)的正整數(shù)作為被猜數(shù),用戶(hù)輸入一個(gè)...
    往sir_b2a2閱讀 2,376評(píng)論 0 0
  • 題目信息 本題要求編寫(xiě)程序,計(jì)算2個(gè)有理數(shù)的和、差、積、商。輸入格式:輸入在一行中按照“a1/b1 a2/b2”的...
    沙_貍閱讀 352評(píng)論 0 0
  • 向日葵的花語(yǔ)是沉默的愛(ài) 傳說(shuō)一 關(guān)于向日葵,曾有一個(gè)凄美的希臘神話(huà)傳說(shuō)??藚翁岫颍–lytie)是一位海洋女神。她...
    王不懂Sir閱讀 1,440評(píng)論 0 0

友情鏈接更多精彩內(nèi)容