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;
    }
    
  • 相关阅读:
    [一个64位操作系统的设计与实现] 3.1 Func_GetFATEntry疑惑
    【参考】 实现X86_64架构下的BootLoader(二)文件系统
    LBA和CHS转换(转)
    Grafana 重置admin密码
    linux-source: not found ubuntu执行脚本报错
    Hbase学习
    高并发理解
    Linux下安装Artemis
    SpringInAction 第八章 发送异步消息
    SpringInAction 六七章总结
  • 原文地址:https://www.cnblogs.com/houzm/p/13588026.html
Copyright © 2011-2022 走看看