PAT乙级—1034. 有理数四则运算(20)-native
来源:互联网 发布:彩虹六号最低配优化 编辑:程序博客网 时间:2024/05/16 11:04
本题要求编写程序,计算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<iostream>#include<cstdio>using namespace std;long long GCD(long long a, long long b) { //求最大公约数 long long m = a % b; while(m) { a = b; b = m; m = a % b; } return b; } void PrintFraction(long long a, long long b) { //将一个分数以规定形式输出 long long k = 1; if(b == 0) { printf("Inf"); return; } if(a < 0) { a = -a; k = -1; } long long gcd = GCD(a, b); a /= gcd; //分子分母分别除以最大公约数完成约分 b /= gcd; if(a / b == 0 && a != 0) { //因为正负号储存在k里,k为0的时候无法区别,在这一步处理 if(k > 0) printf("%lld/%lld", a, b); else printf("(-%lld/%lld)", a, b); return; } k = k * a / b; //得到整数部分 a %= b; //得到分子部分 if(b == 1 && k < 0) printf("(%lld)", k); else if(b == 1 && k >= 0) //分子为0,或者分母为1,结果都是整数,直接输出分子部分(不输出分母) printf("%lld", k); else if(k < 0) printf("(%lld %lld/%lld)", k, a, b); else printf("%lld %lld/%lld", k, a, b); } void Print(long long a1, long long b1, long long a2, long long b2, char ch) { //输出一个表达式 long long c1, c2; PrintFraction(a1, b1); //范式输出第一个操作数 printf(" %c ", ch); //输出操作符 PrintFraction(a2, b2); //范式输出第二个操作数 printf(" = "); //输出等号 switch(ch) { //范式输出结果 case '+': c1 = a1 * b2 + a2 * b1; c2 = b1 * b2; PrintFraction(c1, c2); printf("\n"); break; case '-': c1 = a1 * b2 - a2 * b1; c2 = b1 * b2; PrintFraction(c1, c2); printf("\n"); break; case '*': c1 = a1 * a2; c2 = b1 * b2; PrintFraction(c1, c2); printf("\n"); break; case '/': c1 = a1 * b2; c2 = b1 * a2; if(c2 < 0) { //确保PrintFraction函数的b是正数 c2 = -c2; c1 = -c1; } PrintFraction(c1, c2); printf("\n"); break; } } int main() { long long a1, b1, a2, b2; scanf("%lld/%lld %lld/%lld", &a1, &b1, &a2, &b2); Print(a1, b1, a2, b2, '+'); Print(a1, b1, a2, b2, '-'); Print(a1, b1, a2, b2, '*'); Print(a1, b1, a2, b2, '/'); return 0; }
题目链接:
https://www.patest.cn/contests/pat-b-practise/1034
0 0
- PAT乙级—1034. 有理数四则运算(20)-native
- PAT-乙级-1034. 有理数四则运算(20)
- PAT乙级.1034. 有理数四则运算(20)
- PAT 乙级 1034. 有理数四则运算(20)
- PAT 乙级 1034. 有理数四则运算(20)
- PAT乙级 1034. 有理数四则运算(20)
- PAT乙级 1034. 有理数四则运算(20)
- [PAT乙级]1034. 有理数四则运算(20)
- PAT乙级1034. 有理数四则运算(20)
- pat 乙级 1034. 有理数四则运算(20)
- PAT 乙级 1034.有理数四则运算
- [PAT-乙级]1034.有理数四则运算
- PAT乙级 有理数四则运算(20)
- 1034. 有理数四则运算(20)-PAT乙级真题
- PAT 乙级 1034. 有理数四则运算(20) Java版
- 1034. 有理数四则运算(20) PAT乙级真题
- PAT乙级题1034.有理数四则运算
- PAT(乙级)1024 有理数四则运算(20)
- CF_603B(欧几里得算法_规律_数论)
- iOS AutoLayout: XIB 设置 CALayer 属性
- 数据结构 - 数组和广义表的基本运算实现
- 找出字符串中的所有数字字符串(C/C++实现)
- RadioButton图片变形的问题
- PAT乙级—1034. 有理数四则运算(20)-native
- C++入门之一【类:析构函数)】
- C++中的const用法
- 20款Notepad++插件下载和介绍
- 冒泡排序
- 乐学成语(1)
- Samba服务器配置
- 正则表达式30分钟入门教程
- opencv学习笔记之一(数据的复制)