分数的四则运算

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
using namespace std;

//分数的四则运算
int Gcd(int m,int n)
{
	int temp;
	if(m<n)  /*比较大小,使得m中存储大数,n中存储小数*/
    {
        temp = m;
        m = n;
        n = temp;
    }
    int t;
	for(int i = m; i > 0 ; i--)
	{
		if(m % i == 0 && n % i == 0)
		{
			t = i;
			break;
		}
	}
	return t;
}



void  plus(int a,int b,int c,int d)
{
	int fenzi,fenmu;
	fenmu = b * d;
	fenzi = a * d + b * c;
	int g;
	g = Gcd(fenmu,fenzi);
	fenmu = fenmu / g;
	fenzi = fenzi / g;
	if(fenzi == fenmu)
		printf("%d/%d + %d/%d = 1",a,b,c,d);
	else if(fenzi == 0)
		printf("%d/%d + %d/%d = 0",a,b,c,d);
	else 
		printf("%d/%d + %d/%d = %d/%d",a,b,c,d,fenzi,fenmu);
}


void minus(int a,int b,int c,int d)
{
	int fenzi,fenmu;
	int g;
	fenmu = b * d;
	fenzi = a * d - b * c;
	if(fenzi >= 0)
	{
		g = Gcd(fenmu,fenzi);
		fenmu = fenmu / g;
		fenzi = fenzi / g;
	}else
	{
		fenzi = -fenzi;
		g = Gcd(fenmu,fenzi);
		fenmu = fenmu / g;
		fenzi = fenzi / g;
		fenzi = -fenzi;
	}
	if(fenzi == 0 )
	{
		printf("%d/%d - %d/%d = 0\n",a,b,c,d);
	}
	else if(fenzi < 0 && abs(fenzi)== fenmu)
		printf("%d/%d - %d/%d = -1",a,b,c,d);
	else if(fenzi > 0 && fenzi == fenmu)
		printf("%d/%d - %d/%d = -1",a,b,c,d);
	else
		printf("%d/%d - %d/%d = %d/%d\n",a,b,c,d,fenzi,fenmu);
} 


void multiply(int a,int b,int c,int d)
{
	int fenzi,fenmu;
	int g;
	fenzi = a * c;
	fenmu = b * d;
	g = Gcd(fenmu,fenzi);
	fenmu = fenmu / g;
	fenzi = fenzi / g;
	if(fenzi == 0 || fenmu == 1)
		printf("%d/%d * %d/%d = %d\n",a,b,c,d,fenzi);
	else 
		printf("%d/%d * %d/%d = %d/%d\n",a,b,c,d,fenzi,fenmu);
} 

void divide(int a,int b,int c,int d)
{
	int fenzi,fenmu;
	int g;
	fenzi = a * d;
	fenmu = b * c;
	g = Gcd(fenzi,fenmu);
	fenmu = fenmu / g;
	fenzi = fenzi / g;
	printf("%d/%d / %d/%d = %d/%d\n",a,b,c,d,fenzi,fenmu);
}



int main()
{
	int a,b,c,d;
	char s;
	scanf("%d %d %c %d %d",&a,&b,&s,&c,&d);
	if(b == 0 || d == 0)
	{
		printf("Input error.Zero cannot be a denominator\n");	
	}else
	{
		switch(s)
		{
			case '+': plus(a,b,c,d);     break;
			case '-': minus(a,b,c,d);    break;
			case '*': multiply(a,b,c,d); break;
			case '/': divide(a,b,c,d);   break;
		}	
	}
	
	return 1;
} 

上一篇:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和


下一篇:实验5-10 使用函数求余弦函数的近似值 (15 分)