有没有大佬知道怎么进一步优化
查看原帖
有没有大佬知道怎么进一步优化
502613
KingHui楼主2021/4/21 16:14

测试都混过去了,就是觉得做的有点太水了。。。 不知道怎么进一步优化。 代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int gcd(int x, int y)
{
	if (y == 0)
		return x;
	return gcd(y, x % y);
}
int main()
{
	char s[110] = "\0";
	int a = 0, b = 0;
	int sgn[110] = { 0 };
	int fz[110] = { 0 }, fm[110] = { 0 };
	int	z = 0, m = 1, z1 = 0;
	scanf("%s", s);
	if (s[0] >= '0' && s[0] <= '9')
	{
		sgn[0] = 1;
		z1++;
	}
	for (int i = 0; s[i] != '\0'; i++)
	{
		if (s[i] >= '0' && s[i] <= '9')
			if (m == 1)
				a = a * 10 + s[i] - '0';
			else
				b = b * 10 + s[i] - '0';
		else if (s[i] == '-')
		{
			sgn[z1] = -1;
			z1++;
			fz[z] += a;
			fm[z] += b;
			z++;
			m = 1;
			a = 0;
			b = 0;
		}
		else if (s[i] == '+')
		{
			sgn[z1] = 1;
			z1++;
			fz[z] += a;
			fm[z] += b;
			z++;
			m = 1;
			a = 0;
			b = 0;
		}
		else
		{
			m = 0;
		}
	}

	fz[z] = a;
	fm[z] = b;
/*
	for (int i = 0; fz[i]; i++)
		printf("%d ", fz[i]);
	printf("\n");
	for (int i = 0; fm[i]; i++)
		printf("%d ", fm[i]);
*/
/*
	int x, y;
	scanf("%d%d", &x, &y);
	printf("%d", gcd(x, y));
*/
	int bei;
	bei = fm[0];
	for (int i = 0; fm[i + 1]; i++)
	{
		if (bei % fm[i + 1] != 0)
			bei = bei * fm[i + 1] / gcd(bei, fm[i + 1]);
		else
			continue;
	}
	int fenzi = 0;
	for (int i = 0; fm[i]; i++)
	{
		fz[i] *= (bei / fm[i]);
		fenzi += fz[i] * sgn[i];
	}
	z = gcd(fenzi, bei);
	if (z < 0)
		z *= -1;
	fenzi /= z;
	bei /= z;
	if (bei != 1)
		printf("%d/%d", fenzi, bei);
	else
		printf("%d", fenzi);
	return 0;
}
2021/4/21 16:14
加载中...