求助:请问为啥是60分啊
查看原帖
求助:请问为啥是60分啊
1542982
oases楼主2025/1/27 11:44
#include<iostream>
#include<math.h>
using namespace std;
int greatestcommondivisor(int a, int b) {
//求最大公约数的函数
	int min = (a > b) ? b : a;
	int s = 1;
	for (int i = 1; i <= min; i++)
		if ((a % i == 0) && (b % i == 0))
			s = i;
	return s;
}
int main() {
	string a, b; cin >> a >> b;
	int lena = a.length(), lenb = b.length();
	int j,k;

	for (int i = 0; i < lena; i++)
		if (a[i] == '/')j = i;
	for (int i = 0; i < lenb; i++)
		if (b[i] == '/')k = i;

	int n1=0, n2=0, d1=0, d2=0;
	for (int h = 0; h < j; h++)
		n1 += (a[h]-'0') * pow(10, j - h - 1);
	for (int h = 0; h < lena - 1 - j; h++)
		d1 += (a[j + 1 + h] - '0') * pow(10, lena - 2 - j - h);

	for (int h = 0; h < k; h++)
		n2 += (b[h] - '0') * pow(10, k - h-1);
	for (int h = 0; h < lenb - 1 - k; h++)
		d2 += (b[k + 1 + h] - '0') * pow(10, lenb - 2 - k - h);

	long int numerator = n1 * n2, denominator = d1 * d2;//分子分母
	//检查分子分母最大公约数是否为1,以此判断能否约分
	int g=greatestcommondivisor(numerator, denominator);
	if (g == 1)cout << numerator << denominator;
	else if (g >= 2)cout <<denominator / g<<" " << numerator / g;
	//分子决定行序数,分母决定列序数。按要求:先输出列序数,再输出行序数
}

给出的一个错误的测试点输入是99/107 43/512, 输出是54784 4257 but不知道有啥问题T_T 求助orz!!!

2025/1/27 11:44
加载中...