【NYOJ】[111]分数加减法

来源:互联网 发布:淘宝摇一摇在哪 编辑:程序博客网 时间:2024/05/22 22:48

这里写图片描述
这里写图片描述

因为输出形式也是分数
所以这一题还是挺有意思的

思路不难 数学问题
需要考虑的特殊情况
一是结果小于0
二是结果为整数
三是结果需要化简

#include<stdio.h>int gcd(int a,int b) {    if(b==0)        return a;    else        return gcd(b,a%b);}int main() {    int a,b,c,d;    char s;    while(scanf("%d/%d%c%d/%d",&a,&b,&s,&c,&d)!=EOF) {        int m,n=b*d;        a*=n/b;        c*=n/d;        if(s=='+')            m=a+c;        else {            if(a<c) {                printf("-");                m=c-a;            } else                m=a-c;        }        if(!m)            printf("0\n");        else if(m%n==0) {            printf("%d\n",m/n);        } else {            int t=gcd(m,n);            m/=t;            n/=t;            printf("%d/%d\n",m,n);        }    }    return 0;}

标程用的字符串记录算式
但思路还是一样的

#include<stdio.h>char str[20];int Gcd(int m,int n) {    if (m==0) return n;    return Gcd(n%m,m);}int main() {    int fz,fm,gcd;    while(scanf("%s",str)!=EOF) {        if(str[3]=='-')            fz=(str[0]-'0')*(str[6]-'0')-(str[2]-'0')*(str[4]-'0');        else fz=(str[0]-'0')*(str[6]-'0')+(str[2]-'0')*(str[4]-'0');        if(fz) {            fm=(str[2]-'0')*(str[6]-'0');            gcd=Gcd(fz,fm);            if(gcd<0) gcd=-gcd;            if(fm/gcd==1) printf("%d\n",fz/gcd);            else printf("%d/%d\n",fz/gcd,fm/gcd);        } else puts("0");    }}

题目地址:【NYOJ】[111]分数加减法

0 0
原创粉丝点击