1034. 有理数四则运算(20)
Posted 一只菜鸡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1034. 有理数四则运算(20)相关的知识,希望对你有一定的参考价值。
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
注意:
1.最后一个测试点一直未通过不清楚为什么
2.int*int会溢出int表示范围
3.注意绝对值abs的应用 避免-1/-2的情况出现
#include <iostream> #include <iomanip> #include <math.h> #include <stdio.h> #include <string> #include <algorithm> #include <vector> #include <map> using namespace std; long long gcd(long long a, long long b) { return (b == 0 ? a : gcd(b, a%b)); } struct fenshu { long long fenzi; long long fenmu; }fs[2]; void printfs(fenshu a) { long long com = gcd(abs(a.fenmu), abs(a.fenzi)); double value = (double)a.fenzi / (double)a.fenmu; long long zheng = abs((long long)value); if (com != 1) { a.fenmu = a.fenmu / com; a.fenzi = a.fenzi / com; } if (value == 0) { cout <<0; } else if (abs(int(value)-value) < 1e-10) { if (value > 0) cout << value; else cout << "(" << value << ")"; } else if (value < 0) { if (abs(value)>1) { cout << "(-" <<zheng<<" "<<abs(abs(a.fenzi) - zheng*abs(a.fenmu)) << "/" << abs(a.fenmu) << ")" ; } else { cout << "(-" << abs(a.fenzi) << "/" << abs(a.fenmu) << ")" ; } } else { if (value > 1) { cout << zheng << " " << abs(abs(a.fenzi) - zheng*abs(a.fenmu)) << "/" << abs(a.fenmu) ; } else { cout << abs(a.fenzi) << "/" << abs(a.fenmu) ; } } } int main() { scanf("%lld/%lld", &fs[0].fenzi, &fs[0].fenmu); scanf("%lld/%lld", &fs[1].fenzi, &fs[1].fenmu); fenshu jia, jian,cheng, chu; jia.fenzi = (fs[0].fenzi*fs[1].fenmu + fs[1].fenzi*fs[0].fenmu); jia.fenmu = fs[0].fenmu*fs[1].fenmu; jian.fenzi = (fs[0].fenzi*fs[1].fenmu - fs[1].fenzi*fs[0].fenmu); jian.fenmu = fs[0].fenmu*fs[1].fenmu; cheng.fenzi = fs[0].fenzi*fs[1].fenzi; cheng.fenmu = fs[0].fenmu*fs[1].fenmu; chu.fenzi = fs[0].fenzi*fs[1].fenmu; chu.fenmu = fs[0].fenmu*fs[1].fenzi; printfs(fs[0]); cout << " + "; printfs(fs[1]); cout << " = "; printfs(jia);cout<<endl; printfs(fs[0]); cout << " - "; printfs(fs[1]); cout << " = "; printfs(jian); cout << endl; printfs(fs[0]); cout << " * "; printfs(fs[1]); cout << " = "; printfs(cheng); cout << endl; if (fs[1].fenzi == 0 || fs[1].fenmu == 0) { printfs(fs[0]); cout << " / "; printfs(fs[1]); cout << " = "; cout << "Inf"; cout << endl; } else { printfs(fs[0]); cout << " / "; printfs(fs[1]); cout << " = "; printfs(chu); cout << endl; } system("pause"); return 0; }
以上是关于1034. 有理数四则运算(20)的主要内容,如果未能解决你的问题,请参考以下文章