zoukankan      html  css  js  c++  java
  • 算法笔记-分数运算

    #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;
    }
    
  • 相关阅读:
    WannaCry蠕虫分析与预防
    对网络传输的理解
    RESTful API 设计最佳实践
    码农们的密码
    腾讯云公网负载均衡技术实现详解
    ELK统一日志系统的应用
    ElasticSearch + Canal 开发千万级的实时搜索系统
    聊架构:5分钟了解REST架构
    Netty5 HTTP协议栈浅析与实践
    这里,彻底了解HTTPS
  • 原文地址:https://www.cnblogs.com/houzm/p/13588026.html
Copyright © 2011-2022 走看看