求助站外题
  • 板块学术版
  • 楼主CLCK
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/10/7 17:40
  • 上次更新2023/10/27 08:17:07
查看原帖
求助站外题
323183
CLCK楼主2022/10/7 17:40

rt 不知道为什么一直float exception error

纯模拟做法()

#include <iostream>
using namespace std;
int dir[10][5] = {
	{2, 3, 4, 5}, 
	{2, 3, 4, 5}, 
	{0, 1, 4, 5}, 
	{0, 1, 4, 5}, 
	{0, 1, 2, 3}, 
	{0, 1, 2, 3}
};
long long p[10], q[10];
long long pp[10], qq[10];
int k;
long long ggcd(long long a, long long b) {
	if (b == 0) return a;
	return ggcd(b, a % b);
}
void add(int i, int j) {
	long long a = p[i], b = q[i];
	long long aa = pp[j], bb = qq[j];
	if (a % 4 == 0) a /= 4;
	else if (a % 2 == 0) a /= 2, b *= 2;
	else b *= 4;
	long long gcd = b * bb / ggcd(b, bb);
	
	a *= gcd / b;
	aa *= gcd / bb;
	qq[j] = gcd / ggcd(gcd, a + aa);
	pp[j] = (a + aa) / ggcd(gcd, a + aa);
}
void minuss(int i) {
	long long a = p[i], b = q[i];
	long long aa = pp[i], bb = qq[i];
	long long gcd = b * bb / ggcd(b, bb);
	if (a == aa) {
		pp[i] = 0, qq[i] = 1;
		return ;
	}
	a *= gcd / b;
	aa *= gcd / bb;
	qq[i] = gcd / ggcd(gcd, - a + aa);
	pp[i] = (- a + aa) / ggcd(gcd, - a + aa);
}
int main() {
	for (int i = 0; i < 6; i++) {
		cin >> p[i];
		pp[i] = p[i];
		q[i] = 1; qq[i] = q[i];
	}
	cin >> k;
	while (k--) {
		for (int i = 0; i < 6; i++) {
			for (int j = 0; j < 4; j++) {
				add(i, dir[i][j]);
			}
			minuss(i);
		}
		for (int i = 0; i < 6; i++) {
			p[i] = pp[i];
			q[i] = qq[i];
			//cout << p[i] << " " << q[i] << endl;
		}
	}
	if (q[2] == 1) cout << p[2] << endl;
	else cout << p[2] << '/' << q[2] << endl;
	return 0;
}
2022/10/7 17:40
加载中...