璟雯院

珺璟如晔,雯华若锦

用户工具

站点工具


icpc:problems:luogup1572
problems
名称计算分数
题目编号P1572
题目链接luogu.com.cn/…
来源Luogu
算法分类字符串
难易程度容易

计算分数

想法

按照题目意思模拟即可。

反思

  1. 没有思考到 long long int 问题,尽管题目说了 int 没问题,但是还是有问题。
  2. 没有认真读题,读到结果用整数表示。

代码实现

方法1:使用纯C++来实现,使用'stringstream'来实现字符串解析。

#include<iostream>
#include<string>
#include<sstream>
#include<algorithm>
using namespace std;
 
long long int gcd(long long int a, long long int b) {
	while (b != 0) {
		long long int tmp = a;
		a = b;
		b = tmp % b;
	}
	return a;
}
 
int main() {
	string str;
	cin >> str;
	stringstream s(str);
	long long int c, d, a = 0, b = 1, temp; 
	char type;
	while(s >> c >> type >> d) {
		c *= b; a *= d; b *= d;
		a += c;
		temp = gcd(abs(a), abs(b));
		a /= temp; b/= temp;
	}
	if(b == 1)
		cout << a;
	else
		cout << a << "/" << b;
	return 0;
}

方法2:使用纯C函数来解析,使用while循环按照一个分数一个分数的形式解析。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
 
long long int gcd(long long int a, long long int b) {
	while (b != 0) {
		long long int tmp = a;
		a = b;
		b = tmp % b;
	}
	return a;
}
 
char str[110];
 
int main() {
	scanf("%s", str);
	int len = strlen(str), curr = 0, flag = 1;
	long long int a = 0, b = 1;
	if(str[0] == '-'){
		flag = -1;
		curr++;
	}
	while(curr < len) {
		long long int c = 0, d = 0;
		while(str[curr] >= '0' && str[curr] <= '9'){
			c = c * 10 + str[curr] - '0';
			curr++;
		}
		curr++;
		while(curr < len && str[curr] >= '0' && str[curr] <= '9'){
			d = d * 10 + str[curr] - '0';
			curr++;
		}
		c = c * b;
		a = a * d;
		b = b * d;
		a = a + flag * c;
		if(str[curr] == '-')
			flag = -1;
		else
			flag = 1;
		curr++;
		long long int temp = gcd(abs(a), b);
		a = a/temp; b = b/temp;
	}
	if(b == 1)
		printf("%lld", a);
	else 
		printf("%lld/%lld", a, b);
	return 0;
}
/app/www/public/data/pages/icpc/problems/luogup1572.txt · 最后更改: 2024/03/13 14:36 由 温婕莺