PAT B1034 有理数四则运算 (20分)(测试点2、3错误注意加上命名空间)

在这里插入图片描述

#include <cstdio>
#include <cstdlib>

using namespace std;

typedef long long LL;

struct Fraction{
    
    
	LL up;
	LL down;
};

int i = 1;

LL gcd(LL a, LL b){
    
    
	if(b == 0) return a;
	return gcd(b, a%b);
}

Fraction reduction(Fraction f){
    
    
	if(f.down < 0){
    
    
		f.down = -f.down;
		f.up = -f.up;
	}
	if(f.up == 0){
    
    
		f.down = 1;
	}else{
    
    
		int d = gcd(abs(f.up),f.down);
		f.up /= d;
		f.down /= d;
	}
	return f;
}

void show(Fraction f){
    
    
	f = reduction(f);
	if(f.up < 0) printf("(");
	if(f.down == 1){
    
    
		printf("%lld", f.up);
	}else if(abs(f.up) > f.down){
    
    
		printf("%lld %lld/%lld", f.up/f.down, abs(f.up)%f.down, f.down);
	}else{
    
    
		printf("%lld/%lld", f.up, f.down);
	}
	if(f.up < 0) printf(")");
}

Fraction jia(Fraction f1, Fraction f2){
    
    
	Fraction res;
	res.up = f1.up*f2.down + f1.down*f2.up;
	res.down = f1.down*f2.down;
	return reduction(res);
}

Fraction jian(Fraction f1, Fraction f2){
    
    
	Fraction res;
	res.up = f1.up*f2.down - f1.down*f2.up;
	res.down = f1.down*f2.down;
	return reduction(res);
}

Fraction cheng(Fraction f1, Fraction f2){
    
    
	Fraction res;
	res.up = f1.up*f2.up;
	res.down = f1.down*f2.down;
	return reduction(res);
}

Fraction chu(Fraction f1, Fraction f2){
    
    
	Fraction res;
	res.up = f1.up*f2.down;
	res.down = f1.down*f2.up;
	return reduction(res);
}

int main(){
    
    
	Fraction f1, f2;
	scanf("%lld/%lld %lld/%lld", &f1.up, &f1.down, &f2.up, &f2.down);
	
	show(f1);
	printf(" + ");
	show(f2);
	printf(" = ");
	show(jia(f1,f2));
	printf("\n");
	
	show(f1);
	printf(" - ");
	show(f2);
	printf(" = ");
	show(jian(f1,f2));
	printf("\n");
	
	show(f1);
	printf(" * ");
	show(f2);
	printf(" = ");
	show(cheng(f1,f2));
	printf("\n");
	
	show(f1);
	printf(" / ");
	show(f2);
	printf(" = ");
	if(f2.up == 0) printf("Inf");
	else(show(chu(f1,f2)));
	printf("\n");
	
	return 0;
}

这题属实给我整吐了,明明是很简单的一题,测试点2、3却一直过不去。
看了其他人的分析,但是我long long用了,0也判断了,样例也都没问题,但是测试点2、3还是死活过不去。最后意外发现加上命名空间以后就通过了???没懂是为什么。

猜你喜欢

转载自blog.csdn.net/weixin_45964844/article/details/112466925