A1088.Rational Arithmetic

本文详细解析了PAT竞赛中的一道20分题目——分数的四则运算模拟。通过定义分数结构,实现加、减、乘、除运算,特别关注了输出格式,包括整数部分、分数部分的正确展示,以及负数的处理。

A1088.Rational Arithmetic

题意

模拟分数的四则运算

思路分析

模拟,在输出过程中,若分子>分母,需要分离出整数部分与分数部分,并且如果项为负数需要带上()

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

struct fraction{
    ll up;  //分子 
    ll down;        //分母 
}a,b,result;

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

fraction simply(fraction a){            //对分子分母进行约分 
    if(a.down < 0) {            //如果输入分母是负数,统一为分子带符号,分母不带符号 
        a.up = -a.up;
        a.down = - a.down;
    }
    int GCD = gcd(abs(a.up),abs(a.down));
    a.up /= GCD;
    a.down /= GCD;
    return a;
}

void showResult(fraction a){
    a = simply(a);          //对a化简  
    if(a.up < 0) printf("(");           //如果是负数 
    if(a.down == 1) printf("%lld",a.up);            //如果分母为1 
    else if(a.up == 0) printf("0");             //如果分子为0 
    else if(abs(a.up) > abs(a.down))            //如果分子>分母,需要输出整数部分 
        printf("%lld %lld/%lld",a.up/a.down,abs(a.up) % a.down,a.down);
    else if(abs(a.up) == abs(a.down)) printf("%d",a.up/a.down);         //分子=分母 
    else 
        printf("%lld/%lld",a.up,a.down);            //分子<分母 
    if(a.up < 0) printf(")");
}

fraction Sum(fraction a,fraction b){
    result.up = a.up * b.down + a.down * b.up;
    result.down = a.down * b.down;
    return simply(result);
}

fraction Mul(fraction a,fraction b) {
    result.up = a.up * b.up;
    result.down = a.down * b.down;
    return simply(result);
}

fraction Del(fraction a,fraction b) {
    result.up = a.up * b.down - a.down * b.up;
    result.down = a.down * b.down;
    return simply(result);
}

fraction div(fraction a,fraction b) {
    result.up = a.up * b.down;
    result.down = a.down * b.up;
    return simply(result);
}

int main(void){
    scanf("%lld/%lld %lld/%lld",&a.up,&a.down,&b.up,&b.down);
    //加法 
    showResult(a);
    printf(" + ");
    showResult(b);
    printf(" = ");
    showResult(Sum(a,b));
    cout<<endl;
    
    //减法
    showResult(a);
    printf(" - ");
    showResult(b);
    printf(" = ");
    showResult(Del(a,b));   
    cout<<endl;
    
    //乘法
    showResult(a);
    printf(" * ");
    showResult(b);
    printf(" = ");
    showResult(Mul(a,b)); 
    cout<<endl;
    //除法
    showResult(a);
    printf(" / ");
    showResult(b);
    printf(" = ");
    if(b.up == 0) cout<<"Inf";
    else showResult(div(a,b)); 
    return 0;
}

总结

PAT 第一道题20分就这么难,这还考个球啊。屎山模拟,恶心到吐血,考虑细节较多

posted @ 2019-02-08 22:10 Western_Trail 阅读( ...) 评论( ...) 编辑 收藏
Rebuild started: Project: rtos_1 *** Using Compiler 'V6.16', folder: 'C:\Keil_v5\ARM\ARMCLANG\Bin' Rebuild target 'Target 1' FCARM uses the following Files via command file '.\Auto_FcArm_Cmd.inp': include\common\SConscript TO rtos_1.axf NOPRINT custom translating @.\Auto_FcArm_Cmd.inp... Custom: C:\Keil_v5\ARM\Bin\FCARM.exe @.\Auto_FcArm_Cmd.inp FCARM FILE CONVERTER V2.58 Completed 1 File(s), Ratio 100% compiling device.c... compiling clock.c... compiling ipc.c... compiling memheap.c... compiling cpu.c... compiling kservice.c... compiling mem.c... compiling mempool.c... compiling irq.c... compiling components.c... compiling idle.c... compiling object.c... compiling scheduler.c... compiling slab.c... compiling thread.c... rtos_1.axf(12): error: 'Net_Config.h' file not found #include <Net_Config.h> ^~~~~~~~~~~~~~ 1 error generated. compiling rtos_1.axf... compiling timer.c... compiling cpuport.c... compiling div0.c... compiling backtrace.c... compiling showmem.c... "src\rtos\rt_thread\libcpu\arm\cortex-m4\context_iar.S", line 27 (column 5): Error: A1163E: Unknown opcode SECTION , expecting opcode or Macro 27 00000000 SECTION .text:CODE(2) ^ "src\rtos\rt_thread\libcpu\arm\cortex-m4\context_iar.S", line 40: Error: A1167E: Invalid line start 40 00000000 rt_hw_interrupt_disable: "src\rtos\rt_thread\libcpu\arm\cortex-m4\context_iar.S", line 41: Error: A1105E: Area directive missing 41 00000000 MRS r0, PRIMASK "src\rtos\rt_thread\libcpu\arm\cortex-m4\context_iar.S", line 41: Warning: A1088W: Faking declaration of area AREA |$$$$$$$| 41 00000000 MRS r0, PRIMASK "src\rtos\rt_thread\libcpu\arm\cortex-m4\context_iar.S", line 49: Error: A1167E: Invalid line start 49 00000008 rt_hw_interrupt_enable: "src\rtos\rt_thread\libcpu\arm\cortex-m4\context_iar.S", line 60: Error: A1167E: Invalid line start 60 0000000e rt_hw_context_switch_interrupt: "src\rtos\rt_thread\libcpu\arm\cortex-m4\context_iar.S", line 61: Error: A1167E: Invalid line start 61 0000000e rt_hw_context_switch: "src\rtos\rt_thread\libcpu\arm\cortex-m4\context_iar.S", line 86: Error: A1167E: Invalid line start 86 0000002e PendSV_Handler: "src\rtos\rt_thread\libcpu\arm\cortex-m4\context_iar.S", line 168: Error: A1167E: Invalid line start 168 0000006a rt_hw_context_switch_to: "src\rtos\rt_thread\libcpu\arm\cortex-m4\context_iar.S", line 215: Error: A1167E: Invalid line start 215 000000a6 rt_hw_interrupt_thread_switch: "src\rtos\rt_thread\libcpu\arm\cortex-m4\context_iar.S", line 220: Error: A1167E: Invalid line start 220 000000a8 HardFault_Handler: 10 Errors, 1 Warning assembling context_iar.S... "src\rtos\rt_thread\libcpu\arm\cortex-m4\context_rvds.S", line 112: Error: A1854E: Unknown opcode 'VSTMFDEQ', maybe wrong target CPU? 112 0000004e VSTMFDEQ r1!, {d8 - d15} ; push FPU register s16~s31 "src\rtos\rt_thread\libcpu\arm\cortex-m4\context_rvds.S", line 142: Error: A1854E: Unknown opcode 'VLDMFDNE', maybe wrong target CPU? 142 00000074 VLDMFDNE r1!, {d8 - d15} ; pop FPU register s16~s31 2 Errors, 0 Warnings assembling context_rvds.S... src/rtos/rt_thread/libcpu/arm/common/divsi3.S(76): error: predicated instructions must be in IT block orrcs ip, ip, #0x10000000 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(98): error: predicated instructions must be in IT block rsbmi r0, r0, #0 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(101): error: predicated instructions must be in IT block rsbmi r1, r1, #0 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(254): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #31 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(255): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #31 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(258): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #30 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(259): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #30 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(262): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #29 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(263): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #29 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(266): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #28 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(267): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #28 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(270): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #27 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(271): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #27 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(274): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #26 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(275): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #26 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(278): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #25 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(279): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #25 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(282): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #24 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(283): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #24 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(286): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #23 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(287): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #23 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(290): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #22 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(291): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #22 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(294): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #21 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(295): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #21 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(298): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #20 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(299): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #20 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(302): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #19 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(303): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #19 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(306): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #18 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(307): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #18 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(310): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #17 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(311): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #17 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(314): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #16 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(315): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #16 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(318): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #15 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(319): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #15 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(322): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #14 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(323): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #14 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(326): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #13 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(327): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #13 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(330): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #12 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(331): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #12 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(334): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #11 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(335): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #11 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(338): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #10 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(339): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #10 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(342): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #9 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(343): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #9 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(346): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #8 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(347): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #8 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(350): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #7 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(351): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #7 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(354): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #6 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(355): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #6 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(358): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #5 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(359): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #5 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(362): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #4 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(363): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #4 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(366): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #3 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(367): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #3 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(370): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #2 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(371): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #2 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(374): error: predicated instructions must be in IT block subhs r1, r1,r0, lsl #1 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(375): error: predicated instructions must be in IT block addhs r3, r3,r2, lsl #1 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(378): error: predicated instructions must be in IT block subhs r1, r1, r0 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(379): error: predicated instructions must be in IT block addhs r3, r3, r2 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(386): error: predicated instructions must be in IT block rsbmi r1, r1, #0 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(388): error: predicated instructions must be in IT block bicmi r0, r0, #0x80000000 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(389): error: predicated instructions must be in IT block rsbmi r0, r0, #0 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(395): error: predicated instructions must be in IT block orrne r1, r1, #1 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(398): error: predicated instructions must be in IT block subhs r1, r1, r0 ^ src/rtos/rt_thread/libcpu/arm/common/divsi3.S(399): error: predicated instructions must be in IT block addhs r3, r3, r2 ^ assembling divsi3.S... assembling context_gcc.S... ".\Objects\rtos_1.axf" - 74 Error(s), 0 Warning(s). Target not created. Build Time Elapsed: 00:00:08
09-27
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\arm\ARM KEIL +51\ARM +C51\ARM\ARMCC\Bin' Build target 'Target 1' assembling crypto_tool.s... crypto_tool.s(1): error: A1158E: Illegal line start, should be blank crypto_tool.s(2): error: A1163E: Unknown opcode cortex-m3 , expecting opcode or Macro crypto_tool.s(3): error: A1167E: Invalid line start crypto_tool.s(5): error: A1163E: Unknown opcode MAX_LEN, , expecting opcode or Macro crypto_tool.s(7): error: A1167E: Invalid line start crypto_tool.s(8): error: A1167E: Invalid line start 8 00000000 // 2????(9): error: A1167E: Invalid line start crypto_tool.s(10): error: A1167E: Invalid line start crypto_tool.s(11): error: A1167E: Invalid line start 11 00000000 test_string3: .asciz (12): error: A1167E: Invalid line start crypto_tool.s(14): error: A1167E: Invalid line start crypto_tool.s(15): error: A1167E: Invalid line start crypto_tool.s(16): error: A1167E: Invalid line start crypto_tool.s(17): error: A1167E: Invalid line start crypto_tool.s(19): error: A1167E: Invalid line start crypto_tool.s(20): error: A1163E: Unknown opcode main , expecting opcode or Macro crypto_tool.s(22): error: A1163E: Unknown opcode XOR , expecting opcode or Macro crypto_tool.s(23): error: A1159E: Label missing from line start crypto_tool.s(24): error: A1159E: Label missing from line start crypto_tool.s(25): error: A1159E: Label missing from line start crypto_tool.s(26): error: A1159E: Label missing from line start crypto_tool.s(27): error: A1167E: Invalid line start crypto_tool.s(28): error: A1105E: Area directive missing crypto_tool.s(28): warning: A1088W: Faking declaration of area AREA |$$$$$$$| crypto_tool.s(29): error: A1106E: Missing comma crypto_tool.s(30): error: A1106E: Missing comma crypto_tool.s(31): error: A1106E: Missing comma crypto_tool.s(32): error: A1517E: Unexpected operator equal to or equivalent to / crypto_tool.s(34): error: A1167E: Invalid line start crypto_tool.s(35): error: A1517E: Unexpected operator equal to or equivalent to / crypto_tool.s(36): error: A1517E: Unexpected operator equal to or equivalent to / crypto_tool.s(39): error: A1137E: Unexpected characters at end of line crypto_tool.s(40): error: A1106E: Missing comma crypto_tool.s(42): error: A1517E: Unexpected operator equal to or equivalent to / crypto_tool.s(43): error: A1517E: Unexpected operator equal to or equivalent to / crypto_tool.s(44): error: A1517E: Unexpected operator equal to or equivalent to / crypto_tool.s(47): error: A1167E: Invalid line start crypto_tool.s(49): error: A1106E: Missing comma crypto_tool.s(52): error: A1167E: Invalid line start crypto_tool.s(53): error: A1159E: Label missing from line start crypto_tool.s(54): error: A1159E: Label missing from line start crypto_tool.s(55): error: A1167E: Invalid line start crypto_tool.s(57): error: A1517E: Unexpected operator equal to or equivalent to / crypto_tool.s(58): error: A1517E: Unexpected operator equal to or equivalent to / crypto_tool.s(60): error: A1167E: Invalid line start crypto_tool.s(61): error: A1517E: Unexpected operator equal to or equivalent to / crypto_tool.s(62): error: A1517E: Unexpected operator equal to or equivalent to / crypto_tool.s(65): error: A1137E: Unexpected characters at end of line crypto_tool.s(66): error: A1106E: Missing comma crypto_tool.s(68): error: A1106E: Missing comma crypto_tool.s(71): error: A1167E: Invalid line start ".\Objects\test.axf" - 50 Error(s), 1 Warning(s).
最新发布
11-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值