有理数

PAT乙级-1034 有理数四则运算 (20分)

为君一笑 提交于 2020-03-11 03:25:31
题目: 本题要求编写程序,计算 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> # include <vector> # include <string> # include <set> # include

【软工】个人项目作业——个人软件流程(PSP)

房东的猫 提交于 2020-03-10 19:01:53
【软工】个人项目作业——个人软件流程(PSP) 项目 内容 班级:北航2020春软件工程 006班(罗杰、任健 周五) 博客园班级博客 作业:设计程序求几何对象的交点集合 个人项目作业 个人课程目标 系统学习软件工程,训练软件开发能力 这个作业在哪个具体方面帮助我实现目标 实践个人软件开发流程(PSP) 项目地址 GitHub: clone/http 个人软件流程(PSP) PSP2.1 预估耗时(分钟) 实际耗时(分钟) Planning 20 20 · Estimate 20 20 Development 310 530 · Analysis 30 90 · Design Spec 10 30 · Design Review 10 10 · Coding Standard 10 10 · Design 40 90 · Coding 120 120 · Code Review 30 30 · Test 60 150 Reporting 50 50 · Test Report 20 20 · Size Measurement 10 10 · Postmortem & Process Improvement Plan 20 20 In Total 380 600 最终完成整个项目的时间远远超出了我的预计,其中与预期严重不符的项包括:分析需求、设计和测试。其中

Python3标准库:fractions有理数

和自甴很熟 提交于 2020-03-06 09:38:45
1. fractions有理数 Fraction类基于numbers模块中Rational定义的API来实现有理数的数值运算。 1.1 创建Fraction实例 与decimal模块类似,可以采用多种方式创建新值。一种简便的方式是由单独的分子和分母值来创建。 import fractions for n, d in [(1, 2), (2, 4), (3, 6)]: f = fractions.Fraction(n, d) print('{}/{} = {}'.format(n, d, f)) 计算新值时要保持最小公分母。 创建Fraction的另一中方法是使用<numerator> / <numerator>字符串表示。 import fractions for s in ['1/2', '2/4', '3/6']: f = fractions.Fraction(s) print('{} = {}'.format(s, f)) 解析这个字符串,以找出分子和分母值。 字符串还可以使用更常用的小数或浮点数记法,即用一个小数点分隔的一系列数字。能够由float()解析而且不表示NaN或无穷大值的所有字符串都被支持。 import fractions for s in ['0.5', '1.5', '2.0', '5e-1']: f = fractions.Fraction(s)

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

穿精又带淫゛_ 提交于 2020-02-28 22:50:53
文章目录 1 题目 2 解析 2.1 题意 2.2 思路 3 参考代码 1 题目 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 2 解析 2.1 题意 求给出的两个分数的加减乘除运算。 2.2 思路 除法,除数的分子为0,应该特判为Inf; 数据范围为int

PAT A1088 Rational Arithmetic

浪尽此生 提交于 2020-02-28 21:24:28
目录 疑问 代码 反思 疑问 暂无 代码 //为什么是rational呢,因为分数都是有理数呀 # include <cstdio> # include <algorithm> using namespace std ; typedef long long ll ; struct Fraction { ll up ; ll down ; } ; Fraction x ; Fraction y ; long long gcd ( ll a , ll b ) { if ( b == 0 ) { return a ; } else { return gcd ( b , a % b ) ; } } void showResult ( Fraction res ) { //1.如果是负数 if ( res . up < 0 ) { printf ( "(" ) ; //如果是整数 if ( res . down == 1 ) { printf ( "%lld" , res . up ) ; } else if ( abs ( res . up ) > res . down ) { //如果是假分数 printf ( "%lld " , res . up / res . down ) ; printf ( "%lld/%lld" , abs ( res . up ) % res . down

PAT B1034 有理数四则运算 (20分)

此生再无相见时 提交于 2020-02-27 01:29:07
题目: 本题要求编写程序,计算 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、split()函数:将分数读入string变量中,将其分为分子和分母储存在long long变量中; 2、基于split(),再分别写四个加减乘除函数; 3、together_simple(), 输入分子分母部分,将其化为最简形式

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

倖福魔咒の 提交于 2020-02-16 21:18:34
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 分析: 本题乍一看不是很难,但是仔细着手开始做会发现有很多的条件判断以及格式判断。干脆直接就利用函数输出,第一次全是定义为 int 型,结果只对前两个,后两个超时,百度了一下发现某位大佬提到了“浮点错误”,即把所有的

1034 有理数四则运算 (20point(s))

馋奶兔 提交于 2020-01-22 11:25:26
本题要求编写程序,计算 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 <stdio.h> #include <iostream> using namespace std; //求最大公约数 long getnum(long a, long b) { long r = a % b; while(r != 0)

有理数分解-数论

风格不统一 提交于 2020-01-18 03:20:55
题目描述 Description   任何一个[0,1]中的有理数p/q(p、q均为自然数)一定可以分解成1/r1+1/r2+1/r3+…+1/rk,且r1<r2<r3<…<rk。当然这样的分解不是唯一的,如5/6=1/2+1/3=1/2+1/5+1/8+1/120,第一个分解式中的第二项比第二个分解式中的第二项大,因此我们可以定义第一个分解式比第二个分解式大。   程序要求找出p/q的最大分解式。 输入输出格式 Input/output 输入格式: 键盘输入p、q,1≤p≤q≤50 输出格式: 从小到大依次输出分解式中的每个分母,一行输出一个数 输入输出样例 Sample input/output 样例测试点#1 输入样例: 5 6 输出样例: 2 3 思路: 假设1/r是能从p/q中分解出来的最大分子为1的真分数,则1/r≤p/q<1/(r-1)① 又因为p/q-1/r=(p×r-q)/(q×r)② 根据①可知,p×(r-1)<q,所以p×r-p<q,代入②中可看出,每次待分解的分数的分子一定单调下降,所以就可以用单精度除法(高精度除以普通整数)解决本题。 注意:在输入p、q后要对分数进行化简。 代码如下: 1 #include <stdio.h> 2 int gcd(int a,int b)//求最大公约数 3 { 4 int r=a%b; 5 while(r>0) 6 {

boost 有理数

╄→尐↘猪︶ㄣ 提交于 2020-01-09 15:35:04
// 忽略警告 #define _SCL_SECURE_NO_WARNINGS #pragma warning(disable : 4996) #include <iostream> #include <boost/integer_traits.hpp> // 类型特性 #include <boost/cstdint.hpp> // 整数类型(如uint16_t) #include <boost/rational.hpp> // 有理数 using namespace std; int main() { cout << boost::integer_traits<int>::const_max << endl;// 最大值 cout << boost::integer_traits<int>::const_min << endl;// 最小值 cout << boost::integer_traits<int>::is_signed << endl;// 有无符号 cout << boost::integer_traits<bool>::const_max << endl; cout << boost::integer_traits<bool>::const_min << endl; cout << (int)boost::integer_traits<char>::const