1034. 有理数四则运算(20)
来源:互联网 发布:html页面写java代码 编辑:程序博客网 时间:2024/06/04 22:45
本题要求编写程序,计算2个有理数的和、差、积、商。
输入格式:
输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0。
输出格式:
分别在4行中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式“k a/b”,其中k是整数部分,a/b是最简分数部分;若为负数,则须加括号;若除法分母为0,则输出“Inf”。题目保证正确的输出中没有超过整型范围的整数。
输入样例1:2/3 -4/2输出样例1:
2/3 + (-2) = (-1 1/3)2/3 - (-2) = 2 2/32/3 * (-2) = (-1 1/3)2/3 / (-2) = (-1/3)输入样例2:
5/3 0/6输出样例2:
1 2/3 + 0 = 1 2/31 2/3 - 0 = 1 2/31 2/3 * 0 = 01 2/3 / 0 = Inf
这题不能用int,可以用long ,long long,long long int;
思路:这题的思路主要都在print1中
化简输入的两个分数,输出第一个数,根据+-*/进入不同的选择,计算出来结果,然后输出第二个数,最后化简计算出来的结果,输出结果
#include<cstdio>#include<iostream>using namespace std;long gcd(long a,long b)//找最大公约数{ if(a<0)a=-a; if(b==0)return a; else return gcd(b,a%b);}int huajian(long *a,long *b){ long a1=*a,b1=*b; if(a1%b1==0){*a=a1/b1,*b=1;return -1;}//两个数可化为一个数 long y=gcd(a1,b1); long x=a1/b1;//分数前面的系数 *a/=y,*b/=y; if(x==0)return 0;//真分数 else//假分数 { if(x<0)x=-x,*a=-*a,*a-=(*b)*x,*a=-*a; else *a-=(*b)*x; return x; }}void print(long x,long a,long b)//打印一个数{ if(x==-1)//一个数 { if(a<0)printf("(%ld)",a/b); else printf("%ld",a/b); } else if(x==0)//真分数 { if(a<0)printf("(%ld/%ld)",a,b); else printf("%ld/%ld",a,b); } else//假分数 { if(a<0) { x=-x;a=-a; printf("(%ld ",x); printf("%ld/%ld)",a,b); } else { printf("%ld %ld/%ld",x,a,b); } }}void print1(long *a,long *b,long *c,long *d,char op){ long a1=*a,b1=*b,c1=*c,d1=*d,s1,s2,f=0,x1,x2,x3; x1=huajian(a,b); x2=huajian(c,d); print(x1,*a,*b); switch(op) { case '+':printf(" + "); s1=a1*d1+b1*c1; s2=b1*d1; break; case '-':printf(" - "); s1=a1*d1-b1*c1; s2=b1*d1; break; case '*':printf(" * "); s1=a1*c1; s2=b1*d1; break; case '/':printf(" / "); s1=a1*d1; s2=b1*c1; if(s2<0)s2=-s2,s1=-s1;//第二个数不能为负 else if(s2==0)f=1;//标记除数是否为0 break; default:break; } print(x2,*c,*d); printf(" = "); if(!f)//除数不为0 { x3=huajian(&s1,&s2); print(x3,s1,s2); cout<<endl; } else cout<<"Inf";}int main(){ long a1,b1,a2,b2; scanf("%ld/%ld %ld/%ld",&a1,&b1,&a2,&b2); long a=a1,b=b1,c=a2,d=b2; print1(&a1,&b1,&a2,&b2,'+'); a1=a,b1=b,a2=c,b2=d; print1(&a1,&b1,&a2,&b2,'-'); a1=a,b1=b,a2=c,b2=d; print1(&a1,&b1,&a2,&b2,'*'); a1=a,b1=b,a2=c,b2=d; print1(&a1,&b1,&a2,&b2,'/'); return 0;}
阅读全文
0 0
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 【java基础】va synchronized关键字的用法(转载)
- python的深拷贝deepcopy与浅拷贝copy
- 深入理解Android音视频同步机制(四)MediaSync的使用与原理
- Android 自定义 DialogFragment 宽度问题
- python装饰器原理
- 1034. 有理数四则运算(20)
- Algorithm之路三:Longest Substring Without Repeating Characters
- cropper裁剪图片(二)
- PHP数组
- LintCode之40 用栈实现队列
- hdu_4772 关于矩阵旋转问题的全面考察
- 开源库nghttp2编译安装
- 算法练习(27):Course Schedule
- 车载GPS等基于部标通信协议的开发方案