首页 > 其他分享 >1034 有理数四则运算

1034 有理数四则运算

时间:2024-04-17 17:13:24浏览次数:27  
标签:有理数 四则运算 fenmu Fraction printf print fenzi 1034 lld

没做出来,看dalao的,dalao超巨。
注意的点: 分子0的处理/计算公约数的时候取正不然会改变正负性
reduction为核心方法

#include <bits/stdc++.h>
using namespace std;
#define ll long long
struct Fraction{
	ll fenzi,fenmu;
};
int gcd(int a,int b){
	if(b==0) return a;
	return gcd(b,a%b);
} 
int lcm(int a,int b){
	return a/gcd(a,b)*b;
}
//化简
Fraction reduction(Fraction a){//来到这个函数的时候a的分子分母正负都是随意的 
	if(a.fenmu < 0){
		a.fenzi = -a.fenzi;
		a.fenmu = -a.fenmu;
	}
	if(a.fenzi == 0) a.fenmu = 1;
	else{
		ll gy = abs(gcd(a.fenzi,a.fenmu));//取正 才不会改变分子分母的符号 
		a.fenmu /= gy;
		a.fenzi /= gy;
	}
	return a;
} 
//加法
Fraction add(Fraction &a,Fraction &b){
	Fraction c;
	c.fenzi = a.fenzi*b.fenmu + a.fenmu*b.fenzi;
	c.fenmu = a.fenmu*b.fenmu;
	return reduction(c);
}
//减法
Fraction sub(Fraction &a,Fraction &b){
	Fraction c;
	c.fenzi = a.fenzi*b.fenmu - a.fenmu*b.fenzi;
	c.fenmu = a.fenmu*b.fenmu;
	return reduction(c);
}
//乘法 
Fraction muti(Fraction &a,Fraction &b){
	Fraction c;
	c.fenzi = a.fenzi * b.fenzi;
	c.fenmu = a.fenmu * b.fenmu;
	return reduction(c);
}
//除法 
Fraction divide(Fraction &a,Fraction &b){
	Fraction c;
	c.fenzi = a.fenzi * b.fenmu;
	c.fenmu = b.fenzi * a.fenmu;
	return reduction(c);
}
//打印结果
void print(Fraction a){//来到这里的时候是最简式分子为正/负  分母为正  可能是假分式/真分式 
	if(a.fenzi < 0) printf("(");//负数加括号 
	if(a.fenmu == 1) printf("%lld",a.fenzi);//如果是整数 只打印分子
	else if(abs(a.fenzi) > abs(a.fenmu)) printf("%lld %lld/%lld",a.fenzi/a.fenmu,abs(a.fenzi)%a.fenmu,a.fenmu);//如果是假分式
    else printf("%lld/%lld",a.fenzi,a.fenmu);
	if(a.fenzi < 0) printf(")");//负数加括号 
} 
int main(){
    Fraction a,b;
    scanf("%lld/%lld %lld/%lld",&a.fenzi,&a.fenmu,&b.fenzi,&b.fenmu);
    //将a化简
    a=reduction(a);
    b=reduction(b);
    //加法
	print(a);
	printf(" + ");
	print(b);
	printf(" = ");
	print(add(a,b));
	printf("\n");
	//减法 
	print(a);
	printf(" - ");
	print(b);
	printf(" = ");
	print(sub(a,b));
	printf("\n");
	//乘法
	print(a);
	printf(" * ");
	print(b);
	printf(" = ");
	print(muti(a,b));
	printf("\n");
	//除法
	print(a);
	printf(" / ");
	print(b);
	printf(" = ");
	if(b.fenzi == 0) printf("Inf");
	else print(divide(a,b));
	printf("\n"); 
	return 0;
}

标签:有理数,四则运算,fenmu,Fraction,printf,print,fenzi,1034,lld
From: https://www.cnblogs.com/chengyiyuki/p/18141243

相关文章

  • 结对编程-c++四则运算
    题目:小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间–尽可能地多设置......
  • 结对编程-C++四则运算
    小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间–尽可能地多设置一......
  • 结对编程-C#-四则运算
    结对编程-四则运算要求:小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之......
  • 结对编程-四则运算
    要求:小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间–尽可能地多设......
  • 结对编程-四则运算
    要求:小学老师要每周给同学出300道四则运算练习题。简易版:式子中只有一个一个运算符号。首先定义一个时间种子,用于生成0-100的随机数,以及生成四个运算符号,实现如下charop[]={'+','-','*','/'};//运算符号inta,t,b;voidrandom(){//随机生成数字srand(time(0));......
  • 结对编程 c++语言实现四则运算练习题
    结对同学:2252813程序要求:两个运算符,100以内的数字,不需要写答案。需要检查答案是否正确,并且保证答案在0-100之间通过阅读题目要求,我们决定使用c++语言完成编程,需要满足两个功能,首先生成一个包含两个运算符的算式,参与运算的数字在100之内。下一步检查答案是否正确,并且保证答......
  • 结对编程-四则运算
    这是一个由c++实现的简单的四则运算程序,使用者总共需要完成300题整数四则运算。结对伙伴:2252721程序要求两个运算符,100以内的数字,不需要写答案。需要检查答案是否正确,并且保证答案在0-100之间。需要符合运算规则通过仔细阅读分析题目要求,我和我的同伴决定使用c++来完成这......
  • 结对编程-C++四则运算
    合作伙伴:22528071.项目要求要求实现四则运算练习题。这个程序有很多种实现方式:·C/C++·C#/VB.net/Java.Excel·UnixShell.Emacs/Powershell/Vbscript.Perl·Python·两个运算符,100以内的数字,不需要写答案。·需要检查答案是否正确,并且保证答案在0……100......
  • 四则运算结对编程
     这次结对编程由我和王振宇同学共同完成,使用C++语言代码及注释如下#include<iostream>usingnamespacestd;//实现加法运算doubleadd(doublex,doubley){returnx+y;}//实现减法运算doublesubtract(doublex,doubley){returnx-y;}//实现乘法运算do......
  • 结对编程——Java实现四则运算
    任务要求请两位同学以结对编码(一个同学coding,另一个同学在旁边审核代码,之后再交换角色)的方式完成本次实验,并把程序、运算结果、博客体会等截屏发到其中一位同学的博客上,并在博客中体现另一位同学的学号(仅学号不体现姓名)。小学老师要每周给同学出300道四则运算练习题。–这个程......