1034. 有理数四则运算(20)

来源:互联网 发布:国产电路设计软件 编辑:程序博客网 时间:2024/05/06 00:13

本题要求编写程序,计算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/32/3 * (-2) = (-1 1/3)2/3 / (-2) = (-1/3)
输入样例2:
5/3 0/6
输出样例2:
1 2/3 + 0 = 1 2/31 2/3 - 0 = 1 2/31 2/3 * 0 = 0

1 2/3 / 0 = Inf

思路分析:这道题逻辑上挺简单的,但是输入输出较为复杂,实在调试不出来重写一遍吧。

代码如下:


// 1034.有理数四则运算(20)sec.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<stdio.h>typedef struct{long a1; long a2; long integer=0; long flags=2; long flagmin=1;}Num;Num disposal(Num num) {long long aa1, aa2,temp;if (num.a2 == 0) {num.flags = 3;return num;}if (num.a1 < 0) {aa1 = -num.a1;num.flagmin = -1;aa2 = num.a2;}else if (num.a1 == 0) {num.flags = 0;num.integer = 0;return num;}else if (num.a1>0) {aa1 = num.a1;aa2 = num.a2;}if (aa1 < aa2) {temp = aa1;aa1 = aa2;aa2 = temp;}while (aa1%aa2 != 0) {temp = aa1%aa2;aa1 = aa2;aa2 = temp;}num.a1 = num.a1/ aa2;num.a2 = num.a2 / aa2;if (num.a1>0) {aa1 = num.a1;aa2 = num.a2;}else {aa1 = -num.a1;aa2 = num.a2;}if (aa1 >= aa2) {if (aa1%aa2 == 0) {num.integer = num.flagmin*aa1 / aa2;num.flags = 0;}else {num.integer = num.flagmin*aa1 / aa2;num.a1 = aa1%aa2;num.flags = 1;}}else {num.flags = 2;}return num;}void display(Num num) {if (num.flags == 0) {if(num.flagmin==1)printf("%ld", num.integer);else {printf("(%ld)", num.integer);}}else if (num.flags == 1) {if (num.flagmin == 1){printf("%ld", num.integer);printf(" %ld/%ld", num.a1, num.a2);}else {printf("(%ld", num.integer);printf(" %ld/%ld)", num.a1, num.a2);}}else if (num.flags == 2) {if (num.flagmin == 1)printf("%ld/%ld", num.a1,num.a2);else {printf("(%ld/%ld)", num.a1,num.a2);}}else if (num.flags == 3) {printf("Inf");}}int main(){Num numa, numb,nums,numc,nump,numd;scanf("%ld/%ld %ld/%ld", &numa.a1,&numa.a2,&numb.a1,&numb.a2);//printf("%ld %ld %ld %ld", numa.a1, numa.a2, numb.a1, numb.a2);nums.a2 = numa.a2*numb.a2;nums.a1 = numa.a1*numb.a2 + numb.a1*numa.a2;numc.a2 = nums.a2;numc.a1 = numa.a1*numb.a2 - numb.a1*numa.a2;nump.a2 = nums.a2;nump.a1 = numa.a1*numb.a1;if (numa.a1< 0) {if (numb.a1 >=0) {numd.a1 = numa.a1*numb.a2;numd.a2 = numa.a2*numb.a1;}else {numd.a1 = (-numa.a1)*numb.a2;numd.a2 = (-numb.a1)*numa.a2;}}else {if (numb.a1 >= 0) {numd.a1 = numa.a1*numb.a2;numd.a2 = numa.a2*numb.a1;}else {numd.a1 =- (numa.a1)*numb.a2;numd.a2 = (-numb.a1)*numa.a2;}}display(disposal(numa));printf(" + ");display(disposal(numb));printf(" = ");display(disposal(nums));printf("\n");display(disposal(numa));printf(" - ");display(disposal(numb));printf(" = ");display(disposal(numc));printf("\n");display(disposal(numa));printf(" * ");display(disposal(numb));printf(" = ");display(disposal(nump));printf("\n");display(disposal(numa));printf(" / ");display(disposal(numb));printf(" = ");display(disposal(numd));printf("\n");    return 0;}

                                             
0 0