【c++】有理数加法
2016-03-20 21:31
543 查看
本题要求编写程序,计算两个有理数的和。
输入格式:
输入在一行中按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。
输出格式:
在一行中按照a/b的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
输入样例1:
输出样例1:
输人样例2:
输出样例2:
程序代码:
附:求最大公约数的算法
输入格式:
输入在一行中按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。
输出格式:
在一行中按照a/b的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
输入样例1:
1/3 1/6
输出样例1:
1/2
输人样例2:
4/3 2/3
输出样例2:
2
程序代码:
#include<iostream> using namespace std; struct fenshu { int m; int n; }; fenshu calc(const fenshu a,const fenshu b); void print(fenshu a); int main() { fenshu num[2]; fenshu ans; char c; for(int i=0;i<=1;i++) cin>>num[i].m>>c>>num[i].n; ans=calc(num[0],num[1]); print(ans); return 0; } fenshu calc(const fenshu a,const fenshu b) { fenshu ans; ans.m=a.m*b.n+b.m*a.n; ans.n =a.n*b.n; int i=2; while((i<=ans.m)&&(i<=ans.n)) { if((ans.m%i==0)&&(ans.n%i==0)) { ans.m=ans.m/i; ans.n=ans.n/i; i=1; } i++; } return ans; } void print(fenshu a) { if(a.n==1) cout<<a.m; else cout<<a.m<<"/"<<a.n; }
附:求最大公约数的算法
int gcd(int m, int n) /* 求最大公约数 */ { int r; if (m == 0 && n == 0) return 0; if (m == 0) return n; if (n == 0) return m; while (1) { r = m % n; if (r == 0) break; m = n; n = r; } return n; }
相关文章推荐
- 【c++】有理数加法
- C++中的static关键字
- C++上机实验2-2
- C++中虚函数工作原理和(虚)继承类的内存占用大小计算
- 一起talk C栗子吧(第一百二十六回:C语言实例--static关键字)
- C/C++学习之路
- C++ 默认实参
- 读书笔记 |Google C++编程风格指南
- [C/C++] C/C++延伸学习系列之STL及Boost库概述
- [c++]链表实现--持续更。
- C++继承和包含
- C++继承和包含
- 利用c语言宏#的用法打日志并统计错误
- C++小结
- C++第二次上机报告
- C++ 重载和const形参
- 【c++】冒泡法排序
- 【c++】冒泡法排序
- C++ 虚函数表解析
- C++模板类