首页 > 其他分享 >洛谷 题解 P1572 计算分数

洛谷 题解 P1572 计算分数

时间:2022-10-14 09:33:21浏览次数:66  
标签:洛谷 P1572 题解 样例 int num ans LCM 输入

题目描述

Csh 被老妈关在家里做分数计算题,但显然他不愿意坐这么多复杂的计算。况且在家门口还有 Xxq 在等着他去一起看电影。为了尽快地能去陪 Xxq 看电影,他把剩下的计算题交给了你,你能帮他解决问题吗?

输入格式

输入一行,为一个分数计算式。

计算式中只包含数字、+-/。其中 / 为分数线,分数线左边为分子,右边为分母。输入数据保证不会出现繁分数。如果输入计算式的第一项为正,不会有前缀 + 号;若为负,会有前缀 - 号。

所有整数均以分数形式出现。

输出格式

输出一行,为最后的计算结果(用最简分数或整数表示)。

保证答案内出现的所有数(如果答案是分数即为分子和分母)均在 64 位带符号整数的表示范围之内。

样例

样例输入 #1

2/1+1/3-1/4

样例输出 #1

25/12

样例输入 #2

1/2+1/3+1/4-1/4+1/5-1/5+6/1-6/1

样例输出 #2

5/6

样例输入 #3

7/4+1/3+8/5-3/2-6/9-6/4-5/2+6/2+4/9-3/9-2/3+5/2-5/4+3/9-3/8-5/8+6/8+3/8-4/7-5/7-3/6+6/9-5/6-5/7-5/2

样例输出 #3

-1259/360

提示

对于所有测试点,输入计算式长度在 100 以内,分子、分母在 1000 以内。

题解

思路

1.数据读取

2.通分累加

3.约分输出

C代码

#include <stdio.h>
#include <stdlib.h>

int greatest_common_divisor(int i, int j) {
	int a = i, b = j;
	if (a < b) {
		int temp = a;
		a = b;
		b = temp;
	}
	int m = a * b;
	int c = a % b;
	while (c) {
		a = b;
		b = c;
		c = a % b;
	}
	return b;
}

void add(int* a, int* b) {
	int LCM = a[1] * b[1] / greatest_common_divisor(a[1], b[1]);
	/*LCM为最大公约数(least_common_multiple)*/
	a[0] = a[0] * LCM / a[1] + b[0] * LCM / b[1];
	a[1] = LCM;
}

int main() {
	int num[2];
	int ans[2];
	scanf("%d/%d", &ans[0], &ans[1]);
	char sign;
	while ((sign = getchar()) != EOF) {
		scanf("%d/%d", &num[0], &num[1]);
		if (sign == '-')
			num[0] *= -1;
		add(ans, (int*)(num));
	}
	int GCD = greatest_common_divisor(ans[0], ans[1]);
	ans[0] /= GCD;
	ans[1] /= GCD;
	if (ans[1] < 0) {
		ans[0] *= -1;
		ans[1] *= -1;
	}
	if (ans[1] != 1)
		printf("%d/%d\n", ans[0], ans[1]);
	else
		printf("%d", ans[0]);
	system("pause");
	return 0;
}

通过详情

image

标签:洛谷,P1572,题解,样例,int,num,ans,LCM,输入
From: https://www.cnblogs.com/fjnhyzCYL/p/16790553.html

相关文章

  • [联合省选2021] 宝石 题解(详细解密)
    [省选联考2021]宝石给定一棵\(n\)个点的树,每个点上有一颗种类是\(w_i\)的宝石,宝石种类共\(m\)种,有一个收集器,按照\(P_1,P_2,...,P_c\)的先后顺序收集宝石(就是说......
  • 洛谷 P8162
    考虑我们的决策肯定是先按\(B_i\)大小在几个州赢得协作者,然后再在剩下的几个州里赢得选票。下文记\(S\)为赢得协作者的州的集合,\(T\)为赢得选票的州的集合。按\(B_......
  • python使用xml.dom.minidom写xml节点属性会自动排序问题解决
    1.背景及问题一个xml文件,过滤掉部分节点,生成新的xml文件,但是生成后,发现节点的属性顺序变化了,根据key的字母信息排了序。如原始信息:<stringtypename="time_type"length......
  • P7077 [CSP-S2020] 函数调用 题解
    首先考虑没有3操作的情况,显然有线段树的\(O(n\logn)\)做法,但是另外有一种\(O(n)\)做法:因为2操作是全局乘所以我们完全可以统计出全局乘了多少然后直接往\(a_i\)......
  • QT QSS样式部分控件生效问题解决记录
    在窗口复杂的时候,建议设置QSS函数setStyleSheet放到 ui->setupUi(this);之前,比如:MainWindow{QFilefile(":/css/TeachingNeedleCard_style.qss");file.op......
  • CF436E Cardboard Box 题解
    CF436ECardboardBox\(n\)个关卡,对每个关卡,你可以花\(a_i\)代价得到一颗星,也可以花\(b_i\)代价得到两颗星,也可以不玩。问获得\(m\)颗星最少需要多少时间。给一......
  • CF1217F 题解
    传送门题意给定一个\(n\)个点的无向图,最初图中无边。两种操作:1xy若\(x,y\)中有边,则删去;否则加入。2xy询问\(x,y\)是否连通。\(x,y\)均加密,真实的\(x,......
  • LG-P3550 [POI2013]TAK-Taxis 题解
    LG-P3550[POI2013]TAK-TaxisSolution目录LG-P3550[POI2013]TAK-TaxisSolution更好的阅读体验戳此进入题面输入格式SolutionCodeUPD更好的阅读体验戳此进入题面存在......
  • 关于一个人类智慧的DP - Vijos 1037 搭建双塔 题解
    关于一个人类智慧的DP-Vijos1037搭建双塔目录关于一个人类智慧的DP-Vijos1037搭建双塔更好的阅读体验戳此进入题面输入格式ExamplesSolutionCodeCode-C++98(JDO......
  • LG-P3552 [POI2013]SPA-Walk 题解
    LG-P3552[POI2013]SPA-WalkSolution目录LG-P3552[POI2013]SPA-WalkSolution更好的阅读体验戳此进入题面输入格式SolutionCodeUPD更好的阅读体验戳此进入(建议您从上......