分数の加減乗除(C++の有理数クラス)

4546 ワード

#include <iostream>
#include <cstdio>
using namespace std;
class Number{
	int numerator,denominator;
public:
	void input(int a,int b)
	{
	   numerator=a;
	   denominator=b;
	}
	void output(int &a,int &b)
	{
		a=numerator;
		b=denominator;
	}

};
int fun(int a,int b)
{
    int temp;
    if(a<b)
    {
        temp=a;
        a=b;
        b=temp;
    }
    while(b)
    {
        temp=a;
        a=b;
        b=temp%b;
    }
    return a;
}


void add(Number num1,Number num2)
{
    int num_num1,num_num2,num_den1,num_den2;
    int temp,temp1,temp2;
    num1.output(num_num1,num_den1);
    num2.output(num_num2,num_den2);
    temp=num_den2*num_den1;
    temp1=num_num1*num_den2;
    temp2=num_num2*num_den1;
    temp1=temp1+temp2;
    int index=fun(temp1,temp);

    temp1=temp1/index;
    temp=temp/index;

    printf("%d/%d + %d/%d = %d/%d
",num_num1,num_den1,num_num2,num_den2,temp1,temp); } void subtract(Number num1,Number num2) { int num_num1,num_num2,num_den1,num_den2; int temp,temp1,temp2; num1.output(num_num1,num_den1); num2.output(num_num2,num_den2); temp=num_den2*num_den1; temp1=num_num1*num_den2; temp2=num_num2*num_den1; temp1=temp1-temp2; int index=fun(temp1,temp); temp1=temp1/index; temp=temp/index; printf("%d/%d + %d/%d = %d/%d
",num_num1,num_den1,num_num2,num_den2,temp1,temp); } void multiply(Number num1,Number num2) { int num_num1,num_num2,num_den1,num_den2; int temp1,temp2; num1.output(num_num1,num_den1); num2.output(num_num2,num_den2); temp1=num_num1*num_num2; temp2=num_den1*num_den2; int index=fun(temp1,temp2); temp1=temp1/index; temp2=temp2/index; printf("%d/%d * %d/%d = %d/%d
",num_num1,num_den1,num_num2,num_den2,temp1,temp2); } void divide(Number num1,Number num2) { int num_num1,num_num2,num_den1,num_den2; int temp1,temp2; num1.output(num_num1,num_den1); num2.output(num_num2,num_den2); temp1=num_num1*num_den2; temp2=num_den1*num_num2; int index=fun(temp1,temp2); temp1=temp1/index; temp2=temp2/index; printf("%d/%d / %d/%d = %d/%d
",num_num1,num_den1,num_num2,num_den2,temp1,temp2); } int main() { Number num1,num2; int n,a,b,peace=0; cout<<"please input numerator and denominator.
"; cout<<"first number:"; cin>>a>>b; num1.input(a,b); cout<<"last number:"; cin>>a>>b; num2.input(a,b); while(1) { cout<<" 1.Change numerator and denominator.
"; cout<<" 2.Add
"; cout<<" 3.Subtract
"; cout<<" 4.Multiply
"; cout<<" 5.Divide
"; cout<<" 6.end
"; cout<<"Please input a choose:"; cin>>n; switch(n) { case 1: cout<<"first number:"; cin>>a>>b; num1.input(a,b); cout<<"last number:"; cin>>a>>b; num2.input(a,b); break; case 2: add(num1,num2); break; case 3: subtract(num1,num2); break; case 4: multiply(num1,num2); break; case 5: divide(num1,num2); break; case 6: peace=1; break; } if(peace) break; } return 0; }