天天看點

pat 1088

1、題目連結

2、題意分析

(1)題意:給出兩個分數,求其加減乘除,寫出其計算過程。要求:輸出的數字元合規範

(2)分析:對于重複很多遍相同的要求,我們可以使用函數來解決這一類問題。

3、源代碼

#include <stdio.h>

#define size 102
long int array[2][2];//分别存儲分子,分母
//使用輾轉相除法得到最大公約數 
long  int getBigNumber(long a ,long b){
	long int remain = a;
	while(remain != 0){//如果餘數不等于0 		
		remain = a % b;
		a = b ;
		b = remain;		
	}
	return a; //傳回最大公約數
} 

void change(long int a,long int b ){
	int flag2 = 0;//用來标志是否輸出)号 
	//統一處理 
	if(a<0 && b<0){
		a = (-1) * a;
		b = (-1) * b;
	}
	else if(a < 0 && b > 0){		
		printf("(-");
		a = -1 * a;
		flag2 = 1;
	} 
	else if(a > 0 && b < 0){
		printf("(-");
		b = -1 * b;
		flag2 = 1;
	} 
	
	//求出第一個數的簡寫形式 
	int flag1 = 0;
	if(a >= b ){
		printf("%ld",a / b);//輸出整數部分
		a %= b;
		flag1 = 1;
	}
	if(a!=0){
		long temp = getBigNumber(a,b);		
    	a /= temp;
		b /= temp;		
	}
	else{//a==0 
		if(!flag1){//如果一開始就比b小且為0 
			printf("0");			
		}
	}
	if(a != 0){
		if(flag1){
			printf(" %ld/%ld",a,b);		
		}
		else{
			printf("%ld/%ld",a,b);	
		}
	} 
	if(flag2){
		printf(")");
	}
} 

int main(){
	long int number;			
	scanf("%ld/%ld %ld/%ld",&array[0][0],&array[0][1],&array[1][0],&array[1][1]);//輸入分子分母 	
		
	long int sumA = 0, sumB = 1; //和
	long int difA = 0, difB = 1;	//差 
	long int proA = 1, proB = 1; //積
	long int quoA = 0, quoB = 1; //商 	
	
	//求和 與 求差 
	if(array[0][1] != array[1][1]){
		if(array[0][1] % array[1][1] == 0){ 
			sumA = array[1][0] * (array[0][1] / array[1][1]) + array[0][0];
			sumB = array[0][1] ;
			
			difA = array[0][0] - array[1][0] * (array[0][1] / array[1][1]) ;
			difB = array[0][1] ;
		}
		else if( array[1][1] % array[0][1] == 0 ){
			sumA = array[0][0] * (array[1][1] / array[0][1]) + array[1][0];
			sumB = array[1][1];
			
			difA = array[0][0] * (array[1][1] / array[0][1]) - array[1][0];
			difB = array[1][1];
		}
		else{
			sumA = array[0][0] * array[1][1] + array[1][0] * array[0][1];
			sumB =  array[0][1] * array[1][1];
			
			difA = array[0][0] * array[1][1] - array[1][0] * array[0][1];
			difB =  array[0][1] * array[1][1];
		}
	}
	else{//如果兩者相等 
		sumA = array[0][0] + array[1][0] ;
		sumB = array[0][1];
		
		difA = array[0][0] - array[1][0] ;
		difB = array[0][1];
	}
	
	//求積
	proA = array[0][0] * array[1][0] ;
	proB = array[0][1] * array[1][1];
		
	//求商
	int flagQro = 1; 
	if(array[1][0]!=0){
		quoA = array[0][0] * array[1][1] ;
		quoB = array[0][1] * array[1][0];				
	} 
	else{
		flagQro = 0;
	}
	
	//輸出加減乘除 
	change (array[0][0],array[0][1]);printf(" + ");change (array[1][0],array[1][1]);printf(" = ");change(sumA,sumB);printf("\n"); 
	change (array[0][0],array[0][1]);printf(" - ");change (array[1][0],array[1][1]);printf(" = ");change(difA,difB);printf("\n");
	change (array[0][0],array[0][1]);printf(" * ");change (array[1][0],array[1][1]);printf(" = ");change(proA,proB);printf("\n");
	if(flagQro)
	{
		change (array[0][0],array[0][1]);printf(" / ");change (array[1][0],array[1][1]);printf(" = ");change(quoA,quoB);printf("\n");	
	}
	else
	{
		change (array[0][0],array[0][1]);printf(" / ");change (array[1][0],array[1][1]);printf(" = ");printf("Inf\n");
	}
}

/*
2/3 -4/2

1/2  2/4

1/3 -2/6

4/3 0/2

1/1 1/1 

0/1 2/1 

2/1 0/2
**/           

4、總結

PAT