🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
1034. 有理数四则运算(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求编写程序,计算2个有理数的和、差、积、商。 输入格式: 输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0。 输出格式: 分别在4行中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式“k a/b”,其中k是整数部分,a/b是最简分数部分;若为负数,则须加括号;若除法分母为0,则输出“Inf”。题目保证正确的输出中没有超过整型范围的整数。 输入样例1: 2/3 -4/2 输出样例1: 2/3 + (-2) = (-1 1/3) 2/3 - (-2) = 2 2/3 2/3 * (-2) = (-1 1/3) 2/3 / (-2) = (-1/3) 输入样例2: 5/3 0/6 输出样例2: 1 2/3 + 0 = 1 2/3 1 2/3 - 0 = 1 2/3 1 2/3 * 0 = 0 1 2/3 / 0 = Inf ### 分析(伪代码和知识点) ### 代码 ``` #include<stdio.h> int gong(long a,long b) { long r,min,max; min=(a>b)?b:a; max=(a>b)?a:b; r=max%min; while(r) { max=min; min=r; r=max%min; } return min; } void print(long a,long b) { long flag=0,c,d,e; if(a<0){ a=-a; flag=1; } if(a==0) printf("0"); else{ e=gong(a,b); a/=e; b/=e; c=a/b; d=a%b; if(flag==0){ if(d==0) printf("%lld",c); else{ if(c==0) printf("%lld/%lld",a,b); else printf("%lld %lld/%lld",c,d,b); } } else{ if(d==0) printf("(-%lld)",c); else{ if(c==0) printf("(-%lld/%lld)",a,b); else printf("(-%lld %lld/%lld)",c,d,b); } } } } void add(long a1,long b1,long a2,long b2) { print(a1,b1); printf(" + "); print(a2,b2); printf(" = "); print(a1*b2+a2*b1,b1*b2); printf("\n"); } void minus(long a1,long b1,long a2,long b2) { print(a1,b1); printf(" - "); print(a2,b2); printf(" = "); print(a1*b2-a2*b1,b1*b2); printf("\n"); } void muilt(long a1,long b1,long a2,long b2) { print(a1,b1); printf(" * "); print(a2,b2); printf(" = "); print(a1*a2,b1*b2); printf("\n"); } void divide(long a1,long b1,long a2,long b2) { print(a1,b1); printf(" / "); print(a2,b2); printf(" = "); if(a2==0) printf("Inf\n"); else{ if(a2<0){ a2=-a2; a1=-a1; } print(a1*b2,b1*a2); printf("\n"); } } int main() { long a1,b1,a2,b2; while(~scanf("%lld/%lld %lld/%lld",&a1,&b1,&a2,&b2)) { add(a1,b1,a2,b2); minus(a1,b1,a2,b2); muilt(a1,b1,a2,b2); divide(a1,b1,a2,b2); } return 0; } ```