icpc:problems:luogup1572
problems | |
---|---|
名称 | 计算分数 |
题目编号 | P1572 |
题目链接 | luogu.com.cn/… |
来源 | Luogu |
算法分类 | 字符串 |
难易程度 | 容易 |
计算分数
想法
按照题目意思模拟即可。
反思
- 没有思考到
long long int
问题,尽管题目说了int
没问题,但是还是有问题。 - 没有认真读题,读到结果用整数表示。
代码实现
方法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 由 温婕莺