蒟蒻87分求助
查看原帖
蒟蒻87分求助
176843
Scarab楼主2020/11/3 16:19

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;

int firnum, secnum, thirdnum, breakpoint, bracket, num;
string s;

int gcd (int m, int n) {
	if (m < n) swap(m, n);
	if (n == 0) return m;
	else return gcd(n, m % n);
}

signed main() {
	cin >> s;
	for (int i = 0; i < s.size(); ++i) {
		if (s[i] == '.') {
			firnum = num;
			breakpoint = i;
			break;
		}
		else {
			num = (num << 1) + (num << 3) + (s[i] ^ 48);
		}
	}
	if (s[s.size() - 1] != ')') {
		num = 0;
		int len = 0;
		for (int i = breakpoint + 1; i < s.size(); ++i) {
			num = (num << 1) + (num << 3) + (s[i] ^ 48);
			len++;
		}
		int a, b;
		a = num, b = pow(10, len);
		int k = gcd(a, b);
		a /= k, b /= k;
		cout << (a + firnum * b) << "/" << b << endl;
	}
	else {
		num = 0;
		int lenk = 0;
		for (int i = breakpoint + 1; i < s.size(); ++i) {
			if (s[i] == '(') {
				bracket = i;
				secnum = num;
				break;
			}
			else {
				lenk++;
				num = (num << 1) + (num << 3) + (s[i] ^ 48);
			}
		}
		num = 0;
		for (int i = bracket + 1; i + 1 < s.size(); ++i) {
			num = (num << 1) + (num << 3) + (s[i] ^ 48);
		}
		thirdnum = num;
		string cur = "";
		int lenwhile = s.size() - 1 - bracket - 1;
		for (int i = 1; i <= lenwhile; ++i) {
			cur = cur + "9";
		}
		for (int i = 1; i <= lenk; ++i) {
			cur = cur + "0";
		}
		int a = 0, b = 0;
		for (int i = 0; i < cur.size(); ++i) {
			b = (b << 1) + (b << 3) + (cur[i] ^ 48);
		}
		a = secnum * pow(10, lenwhile) + thirdnum;
		int k = gcd(a, b);
		a /= k, b /= k;
		cout << (a + firnum * b) << "/" << b << endl;
	}
	return 0;
}
2020/11/3 16:19
加载中...