1034. 有理数四则运算(20)
2016-04-30 17:23
507 查看
本题要求编写程序,计算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思路分析:这道题逻辑上挺简单的,但是输入输出较为复杂,实在调试不出来重写一遍吧。代码如下:
// 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; }
相关文章推荐
- leetcode——188——Best Time to Buy and Sell Stock IV
- Netdisco CentOS 6安装步骤
- Android 使用Post与Get方法进行表单提交数据
- ZOJ2492 ping pong(树状数组BIT)
- Hibernate对象状态转化
- each-Select
- 8.多表查询-外连接
- 讲义二 第一个HelloWorld
- 动态规划(dynamic programming)原理
- 1033. 旧键盘打字(20)
- 228. Summary Ranges
- java位运算符
- 随想 (附一个算法)
- linux上修改时间
- 新媒体时代标题党的速成秘技19条
- 1032. 挖掘机技术哪家强(20)
- for循环,增强型for循环,迭代(从前往后,从后往前)
- google-perftools简明使用
- 学习进度条——第九周
- Docker在LXC基础上做了什么 && Docker与虚拟机之间有什么不同