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

本题要求编写程序,计算 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<cstdio>
#include<algorithm>
using namespace std;typedef long long ll;struct Fraction{ll up,down;
}a,b; ll gcd(ll a, ll b){return b == 0?a:gcd(b,a%b);
}Fraction reduction(Fraction result){if(result.down < 0){result.down = -result.down;result.up = -result.up;}if(result.up == 0) result.down = 1;int d = gcd(abs(result.up),abs(result.down));result.up /= d;result.down /= d;return result;
}Fraction add(Fraction f1,Fraction f2){Fraction result;result.up = f1.up*f2.down + f1.down * f2.up;result.down = f1.down*f2.down;return result;
}Fraction minu(Fraction f1,Fraction f2){Fraction result;result.up = f1.up*f2.down - f1.down * f2.up;result.down = f1.down*f2.down;return result;
}Fraction multi(Fraction f1,Fraction f2){Fraction result;result.up = f1.up*f2.up;result.down = f1.down*f2.down;return result;
}Fraction divide(Fraction f1,Fraction f2){Fraction result;result.up = f1.up*f2.down;result.down = f1.down*f2.up;return result;
}void showResult(Fraction r){r = reduction(r);if(r.up < 0) printf("(");if(r.down == 1) printf("%lld",r.up);else{if(abs(r.up) > r.down){printf("%lld %lld/%lld",r.up/r.down,abs(r.up)%r.down,r.down);}else{printf("%lld/%lld",r.up,r.down);}}if(r.up < 0) printf(")");    
}int main(){scanf("%lld/%lld %lld/%lld",&a.up,&a.down,&b.up,&b.down);showResult(a);printf(" + ");showResult(b);printf(" = ");showResult(add(a,b));printf("\n");showResult(a);printf(" - ");showResult(b);printf(" = ");showResult(minu(a,b));printf("\n");showResult(a);printf(" * ");showResult(b);printf(" = ");showResult(multi(a,b));printf("\n");showResult(a);printf(" / ");showResult(b);printf(" = ");if(b.up == 0) printf("Inf");else showResult(divide(a,b));printf("\n");return 0;
}

 

转载于:https://www.cnblogs.com/wanghao-boke/p/10292915.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1035 插入与归并 (25 分)

根据维基百科的定义&#xff1a; 插入排序是迭代算法&#xff0c;逐一获得输入数据&#xff0c;逐步产生有序的输出序列。每步迭代中&#xff0c;算法从输入序列中取出一元素&#xff0c;将之插入有序序列中正确的位置。如此迭代直到全部元素有序。 归并排序进行如下迭代操作&a…

迭代式失效情况

vector 向容器插入元素后&#xff1a; 如果容器是vector或string&#xff0c;且存储空间被重新分配&#xff0c;则指向容器的迭代器会失效&#xff1b;如果存储空间未重新分配&#xff0c;指向插入点位置号之前的元素的迭代器仍然有效&#xff0c;但是指向插入点之后的元素的迭…

1039 到底买不买 (20 分)

小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串&#xff0c;但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下&#xff0c;某串珠子里是否包含了全部自己想要的珠子&#xff1f;如果是&#xff0c;那么告诉她有多少多余的珠子&#xff1b;如果…

【Leetcode】111. 二叉树的最小深度

给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最小深度 2. 解题思路&#xff1a;…

1040 有几个PAT (25 分

字符串 APPAPT 中包含了两个单词 PAT&#xff0c;其中第一个 PAT 是第 2 位(P)&#xff0c;第 4 位(A)&#xff0c;第 6 位(T)&#xff1b;第二个 PAT 是第 3 位(P)&#xff0c;第 4 位(A)&#xff0c;第 6 位(T)。 现给定字符串&#xff0c;问一共可以形成多少个 PAT&#xff…

g

1. 何时需要成员初始化列表&#xff1f;过程是什么&#xff1f; 当初始化一个引用成员变量时&#xff1b;初始化一个const成员变量时&#xff1b;当调用一个基类的构造函数&#xff0c;而构造函数拥有一组参数时&#xff1b;当调用一个成员类的构造函数&#xff0c;而他拥有一组…

【Leetcode | 1】93. 复原IP地址

给定一个只包含数字的字符串&#xff0c;复原它并返回所有可能的 IP 地址格式。 示例: 输入: "25525511135" 输出: ["255.255.11.135", "255.255.111.35"] 方法一&#xff1a; class Solution { public:vector<string> restoreIpAddresse…

1051 复数乘法 (15 分)

复数可以写成 ( 的常规形式&#xff0c;其中 A 是实部&#xff0c;B 是虚部&#xff0c;i 是虚数单位&#xff0c;满足 1&#xff1b;也可以写成极坐标下的指数形式 (&#xff0c;其中 R 是复数模&#xff0c;P 是辐角&#xff0c;i 是虚数单位&#xff0c;其等价于三角形式 (。…

【Leetcode | 13】56. 合并区间

给出一个区间的集合&#xff0c;请合并所有重叠的区间。 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠…

1050 螺旋矩阵 (25 分

本题要求将给定的 N 个正整数按非递增的顺序&#xff0c;填入“螺旋矩阵”。所谓“螺旋矩阵”&#xff0c;是指从左上角第 1 个格子开始&#xff0c;按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列&#xff0c;满足条件&#xff1a;mn 等于 N&#xff1b;m≥n&#xff1b;且…

【Leetcode | 11】268. 缺失数字

给定一个包含 0, 1, 2, ..., n 中 n 个数的序列&#xff0c;找出 0 .. n 中没有出现在序列中的那个数。 示例 1: 输入: [3,0,1] 输出: 2 示例 2: 输入: [9,6,4,2,3,5,7,0,1] 输出: 8 说明: 你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现? class Solution { p…

1053 住房空置率 (20 分)

在不打扰居民的前提下&#xff0c;统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断。判断方法如下&#xff1a; 在观察期内&#xff0c;若存在超过一半的日子用电量低于某给定的阈值 e&#xff0c;则该住房为“可能空置”&#xff1b; 若观察期超过某给定阈值…

1052 卖个萌 (20 分)

萌萌哒表情符号通常由“手”、“眼”、“口”三个主要部分组成。简单起见&#xff0c;我们假设一个表情符号是按下列格式输出的&#xff1a; [左手]([左眼][口][右眼])[右手]现给出可选用的符号集合&#xff0c;请你按用户的要求输出表情。 输入格式&#xff1a; 输入首先在前三…

1054 求平均值 (20 分)

1054 求平均值 &#xff08;20 分&#xff09;本题的基本要求非常简单&#xff1a;给定 N 个实数&#xff0c;计算它们的平均值。但复杂的是有些输入数据可能是非法的。一个“合法”的输入是 [−1000,1000] 区间内的实数&#xff0c;并且最多精确到小数点后 2 位。当你计算平均…

【Leetcode | 12】342. 4的幂

给定一个整数 (32 位有符号整数)&#xff0c;请编写一个函数来判断它是否是 4 的幂次方。 示例 1: 输入: 16 输出: true 示例 2: 输入: 5 输出: false 方法一&#xff1a; class Solution { public:bool isPowerOfFour(int num) {// 0x55555555 二进制 1010101010101010101010…

1056 组合数的和 (15 分)

给定 N 个非 0 的个位数字&#xff0c;用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求所有可能组合出来的 2 位数字的和。例如给定 2、5、8&#xff0c;则可以组合出&#xff1a;25、28、52、58、82、85&#xff0c;它们的和为330。 输入格式&#xff1a; 输入在第一行…

【Leetcode | 42】129. 求根到叶子节点数字之和

给定一个二叉树&#xff0c;它的每个结点都存放一个 0-9 的数字&#xff0c;每条从根到叶子节点的路径都代表一个数字。 例如&#xff0c;从根到叶子节点路径 1->2->3 代表数字 123。 计算从根到叶子节点生成的所有数字之和。 说明: 叶子节点是指没有子节点的节点。 示例…

1057 数零壹 (20 分)

给定一串长度不超过 10​5​​ 的字符串&#xff0c;本题要求你将其中所有英文字母的序号&#xff08;字母 a-z 对应序号 1-26&#xff0c;不分大小写&#xff09;相加&#xff0c;得到整数 N&#xff0c;然后再分析一下 N 的二进制表示中有多少 0、多少 1。例如给定字符串 PAT…

145. 二叉树的后序遍历

给定一个二叉树&#xff0c;返回它的 后序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 进阶: 递归算法很简单&#xff0c;你可以通过迭代算法完成吗&#xff1f; 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;…