时间限制 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)的更多相关文章

  1. Python3基础-分数运算

    Python3分数运算 fractions 模块可以被用来执行包含分数的数学运算. 案例 >>> from fractions import Fraction >>> ...

  2. C++程序设计实践指导1.6分数运算改写要求实现

    改写要求:重载>>和<<实现分数类对象的直接输入输出,重载+完成多个分数对象加法 #include <cstdlib> #include <iostream& ...

  3. Python: 分数运算

    fractions 模块可以被用来执行包含分数的数学运算 >>> from fractions import Fraction >>> a = Fraction(5 ...

  4. Python之复数、分数、大型数组数学运算(complex、cmath、numpy、fractions)

    一.复数的数学运算 复数可以用使用函数 complex(real, imag) 或者是带有后缀j的浮点数来指定 a=complex(2,4) print(a) # (2+4j) b=2-5j # 获取 ...

  5. 埃及分数&&The Rotation Game&&骑士精神——IDA*

    IDA*:非常好用的搜索,可以解决很多深度浅,但是规模大的搜索问题. 估价函数设计思路:观察一步最多能向答案靠近多少. 埃及分数 题目大意: 给出一个分数,由分子a 和分母b 构成,现在要你分解成一系 ...

  6. Throwing Dice LightOJ - 1064 || (勉强能用的)分数类

    Throwing Dice LightOJ - 1064 方法: 设ans[i][j]表示i个骰子点数恰好为j的概率.那么ans[1][1]到ans[1][6]都为1/6. 显然,$ans[i][j] ...

  7. MATLAB符号对象与符号运算

    序言 符号对象(Symbolic Objects 不同于普通的数值计算)是Matlab中的一种特殊数据类型,它可以用来表示符号变量.表达式以及矩阵,利用符号对象能够在不考虑符号所对应的具体数值的情况下 ...

  8. web四则混合运算3

    一.程序要求: 可以控制下列参数: 是否有乘除法: 是否有括号(最多可以支持十个数参与计算): 数值范围: 加减有无负数: 除法有无余数!   二.设计思路 要求能够通过参数来控制有无乘除法,加减有无 ...

  9. 5-Java-C(单位分数)

    题目描述: 形如:1/a 的分数称为单位分数. 可以把1分解为若干个互不相同的单位分数之和. 例如: 1 = 1/2 + 1/3 + 1/9 + 1/18 1 = 1/2 + 1/3 + 1/10 + ...

随机推荐

  1. java_方法的定义、调用、重载

    方法的定义 1 概述 方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能. 当我们需要这个功能的时候,就可以去调用.这样即实现了代码的复用性,也解决了代码冗余的现象. 2 ...

  2. label smoothing

  3. C#开发笔记之04-如何用C#优雅的计算个人所得税?

    C#开发笔记概述 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/960 访问. 首先,要对个人所得税的计算方式了解之后再 ...

  4. 基于小程序云Serverless开发微信小程序

    本文主要以使用小程序云Serverless服务开发一个记事本微信小程序为例介绍如何使用小程序云Serverless开发微信小程序.记事本小程序的开发涉及到云函数调用.云数据库存储.图片存储等功能,较好 ...

  5. 浏览器自动化的一些体会2 webBrowser控件之ajax

    上个帖子简要讨论了浏览器自动化的几种方法.现在讨论webBrowser控件使用中的一些问题.基本的操作就不详细说了,随便网上找个帖子或找本书都有介绍的.这里只写点网上似乎少有人总结过的内容,以及自己的 ...

  6. 拼接html不显示layui进度条解决方法

    最新有个新需求,要异步拼接html并渲染数据,并且我这边是用layui的flow.load(流加载)渲染多个进度条.按官网给出的 element.progress('demo', n+'%'); 就是 ...

  7. 性能分析(7)- 未利用系统缓存导致 I/O 缓慢案例

    性能分析小案例系列,可以通过下面链接查看哦 https://www.cnblogs.com/poloyy/category/1814570.html 前提 前面有学到 Buffer 和 Cache 的 ...

  8. 海豚星空扫码投屏 Android 接收端 SDK 集成 六步骤

    一 跟目录的build.gradle添加私有mevan仓库 maven {url 'http://nexus.dolphinstar.cn/repo/openmavenx'} 二 app/build. ...

  9. Storm与SparkStreaming对比

    Storm与SparkStreaming对比 ◆ Spark Streaming 批处理的性能比Storm高出几十倍.◆ Streaming采用小批量模式,Storm是一条消息一条消息的计算.◆ St ...

  10. nova 通过 python curl 创建虚拟机---keystone v2

    #! /bin/python #coding=utf- import urllib2 import json import requests # token post_url = 'http://12 ...