• 算法笔记-分数运算


    #include <iostream>
    #include <vector>
    #include <cstring>
    #include <unordered_map>
    #include <stack>
    #include <queue>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    /*
    	分数四则运算
    
    */
    // 1 分数的标识
    struct Fraction {
    	int u,d; // up down
    };
    // 求公约数 
    int gcd(int a, int b) {
    	if(b==0)return a;
    	else return gcd(b,a%b);
    }
    // 2 分数的化简
    Fraction reduction(Fraction f) {
    	// 如为负数,将负号调整到分子
    	if(f.d<0) {
    		f.d=abs(f.d);
    		f.u=-f.u;
    	}
    	// 分子为0,将分母置为1
    	if(f.u==0)f.d=1;
    	else { // 分子分母有公约数
    		int g = gcd(abs(f.u),f.d);
    		if(g!=1) {
    			f.d/=g;
    			f.u/=g;
    		}
    	}
    	return f;
    }
    // 3 分数的打印
    void print(Fraction f){
    	f = reduction(f);
    	if(f.d==1)printf("%d",f.u); // 整数 
    	else if(abs(f.u)>abs(f.d)){ // 假分数 
    		printf("%d %d/%d",f.u/f.d,abs(f.u)%f.d,f.d);
    	}else{ //真分数 
    		printf("%d/%d",f.u,f.d);
    	} 
    	printf("
    ");
    } 
    // 4 分数加法
    Fraction add(Fraction a,Fraction b){
    	Fraction c;
    	c.u=a.u*b.d+a.d*b.u;
    	c.d=a.d*b.d;
    	return reduction(c);
    } 
    // 5 分数减法 
    Fraction sub(Fraction a,Fraction b){
    	Fraction c;
    	c.u=a.u*b.d-a.d*b.u;
    	c.d=a.d*b.d;
    	return reduction(c);
    } 
    // 6 分数乘法
    Fraction multi(Fraction a,Fraction b){
    	Fraction c;
    	c.u = a.u*b.u;
    	c.d = a.d*b.d;
    	return reduction(c);
    } 
    // 7 分数的除法
    Fraction divide(Fraction a,Fraction b){
    	Fraction c;
    	c.u=a.u*b.d;
    	c.d=a.d*b.u;
    	return reduction(c);
    } 
    int main(int argc,char * argv[]) {
    	Fraction a,b;
    	a.u=10;
    	a.d=3;
    	b.u=8;
    	b.d=-5;
    	Fraction c1=add(a,b); 
    	Fraction c2=sub(a,b); 
    	Fraction c3=multi(a,b); 
    	Fraction c4=divide(a,b); 
    	print(c1);
    	print(c2);
    	print(c3);
    	print(c4);
    	return 0;
    }
    
  • 相关阅读:
    JAVA实现图的邻接表以及DFS
    对于JAVA多线程卖票小程序的理解
    我的第一篇博客
    The 'with' and 'as' Keywords
    Buffering Data
    rstrip
    MapFields和并行计算(OpenFOAM)
    Python 调用自己编写的Class
    vs2013和vs2010的配置
    Eclipse的配置
  • 原文地址:https://www.cnblogs.com/houzm/p/13588026.html
Copyright © 2020-2023  润新知