分数运算(gcd)
时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小)
题目描述
计算机中采用浮点数表示所有实数,但这意味着精度丢失。例如无法精确表示“1/3”。
NowCoder最近要处理很多金融问题,这些账目不允许出现精度丢失,因为差之毫厘谬之千里。你能帮他实现一套分数的计算器吗?
输入描述:
输入包含多组数据。
每组数据一行,包含两个分数和一个运算符,中间用空格隔开。
其中分子与分母均为不大于30的正整数。
输出描述:
对应每一组数据,输出两个分数的计算结果。
要求输出最简分数,即分子与分母互质。
输入例子:
1/3 2/3 +
1/5 1/4 -
1/2 1/3 *
2/3 4/3 /
输出例子:
1/1
-1/20
1/6
1/2
题解:利用gcd函数来求解是否互质,但要考虑负数的情况
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a,b,c,d;
char oper;
while(scanf("%d/%d %d/%d %c",&a,&b,&c,&d,&oper)!=EOF)
{
if(oper=='+')
{
int sum1=a*d+b*c;
int sum2=b*d;
while(__gcd(sum1,sum2)!=1)
{
int k=sum1;
sum1/=__gcd(sum1,sum2);
sum2/=__gcd(k,sum2);
}
printf("%d/%d\n",sum1,sum2);
}
if(oper=='-')
{
int sum1=a*d-b*c;
int flag=0;
if(sum1<0)
{
sum1=-sum1;
flag=1;
}
int sum2=b*d;
while(__gcd(sum1,sum2)!=1)
{
int k=sum1;
sum1/=__gcd(sum1,sum2);
sum2/=__gcd(k,sum2);
}
if(flag)
printf("-%d/%d\n",sum1,sum2);
else
printf("%d/%d\n",sum1,sum2);
}
if(oper=='*')
{
int sum1=a*c;
int sum2=b*d;
while(__gcd(sum1,sum2)!=1)
{
int k=sum1;
sum1/=__gcd(sum1,sum2);
sum2/=__gcd(k,sum2);
}
printf("%d/%d\n",sum1,sum2);
}
if(oper=='/')
{
int sum1=a*d;
int sum2=b*c;
while(__gcd(sum1,sum2)!=1)
{
int k=sum1;
sum1/=__gcd(sum1,sum2);
sum2/=__gcd(k,sum2);
}
printf("%d/%d\n",sum1,sum2);
}
}
return 0;
}
分数运算(gcd)的更多相关文章
- Python3基础-分数运算
Python3分数运算 fractions 模块可以被用来执行包含分数的数学运算. 案例 >>> from fractions import Fraction >>> ...
- C++程序设计实践指导1.6分数运算改写要求实现
改写要求:重载>>和<<实现分数类对象的直接输入输出,重载+完成多个分数对象加法 #include <cstdlib> #include <iostream& ...
- Python: 分数运算
fractions 模块可以被用来执行包含分数的数学运算 >>> from fractions import Fraction >>> a = Fraction(5 ...
- Python之复数、分数、大型数组数学运算(complex、cmath、numpy、fractions)
一.复数的数学运算 复数可以用使用函数 complex(real, imag) 或者是带有后缀j的浮点数来指定 a=complex(2,4) print(a) # (2+4j) b=2-5j # 获取 ...
- 埃及分数&&The Rotation Game&&骑士精神——IDA*
IDA*:非常好用的搜索,可以解决很多深度浅,但是规模大的搜索问题. 估价函数设计思路:观察一步最多能向答案靠近多少. 埃及分数 题目大意: 给出一个分数,由分子a 和分母b 构成,现在要你分解成一系 ...
- Throwing Dice LightOJ - 1064 || (勉强能用的)分数类
Throwing Dice LightOJ - 1064 方法: 设ans[i][j]表示i个骰子点数恰好为j的概率.那么ans[1][1]到ans[1][6]都为1/6. 显然,$ans[i][j] ...
- MATLAB符号对象与符号运算
序言 符号对象(Symbolic Objects 不同于普通的数值计算)是Matlab中的一种特殊数据类型,它可以用来表示符号变量.表达式以及矩阵,利用符号对象能够在不考虑符号所对应的具体数值的情况下 ...
- web四则混合运算3
一.程序要求: 可以控制下列参数: 是否有乘除法: 是否有括号(最多可以支持十个数参与计算): 数值范围: 加减有无负数: 除法有无余数! 二.设计思路 要求能够通过参数来控制有无乘除法,加减有无 ...
- 5-Java-C(单位分数)
题目描述: 形如:1/a 的分数称为单位分数. 可以把1分解为若干个互不相同的单位分数之和. 例如: 1 = 1/2 + 1/3 + 1/9 + 1/18 1 = 1/2 + 1/3 + 1/10 + ...
随机推荐
- 双下划线开头的attr方法
# class Foo: # x=1 # def __init__(self,y): # self.y=y # # def __getattr__(self, item): # print('执行__ ...
- 008_用go语言实现简单的冒泡排序
冒泡排序是各个语言中的基本排序算法,本次我们用go语言实现简单的冒泡排序 package main import "fmt" // [13,10,5,7,2] // [10,13, ...
- 【lhyaaa】最近公共祖先LCA——倍增!!!
高级的算法——倍增!!! 根据LCA的定义,我们可以知道假如有两个节点x和y,则LCA(x,y)是 x 到根的路 径与 y 到根的路径的交汇点,同时也是 x 和 y 之间所有路径中深度最小的节 点,所 ...
- lombok的基本使用方法
在java刚开始学习的时候,首先就会学习封装.继承和多态,就拿封装来说,封装就是为了保护数据安全而将实体类内部数据保持为私有状态,如果外部程序想要访问里面的数据就必须调用此实体类提供的相关数据接口,这 ...
- Express Response 之 end /send 傻傻分不清楚
Express是一个轻量的经典的Node.js开启服务和快速路由管理的库.开启服务的方式也是非常的简单 只需要简单的,安装 $ npm install express -------> 引入 ...
- kafka-clients 1.0 内部请求接口文档
AddOffsetsToTxnRequest version:0 name type defaultValue docString transactional_id STRING null The t ...
- 【Apollo】(2)--- Apollo架构设计
Apollo架构设计 上一篇博客有讲到:[Apollo](1)--- Apollo入门介绍篇 这篇来写Apollo的核心架构设计 一.整体架构 Apollo整体架构图,已由作者宋顺已经给出: 这幅图所 ...
- java中extends与implements的区别
学了java很久了,久不用之后给同学解决一个java问题的时候,就卡在这个标题上了. 下面是java中extends与implements的区别: 1. 在类的声明中,通过关键字extends来创建一 ...
- eclipse及idea使用问题记录
使用eclipse或idea的时候会遇到各式各样的小问题,解决方案其实网上也大都搜得到,但是下次遇到的时候总是想不起来如何解决,还要花费时间再次查资料.所以以后把遇到的问题都记录一下. Eclipse ...
- 调试tomcat9.0.19源码
本文所用到的环境: IntelliJ IDEA Apache Maven 3.3.9 jdk1.8 1. 查看Tomcat版本 $TOMCAT_HOME\bin\version.bat D:\Prog ...