1:最大公约数,最小公倍数求法 参考https://blog.csdn.net/special_hg/article/details/52450073
最小公约数最简单的写法:
2: if else语句
一个 if 语句后可跟一个可选的 else if...else 语句,这可用于测试多种条件。
当使用 if...else if...else 语句时,以下几点需要注意:
- 一个 if 后可跟零个或一个 else,else 必须在所有 else if 之后。
- 一个 if 后可跟零个或多个 else if,else if 必须在 else 之前。
- 一旦某个 else if 匹配成功,其他的 else if 或 else 将不会被测试。
思路:先写一个函数来化简输入的分数 随后在主函数里面运用即可。
#include<iostream>
#include<math.h>
using namespace std;
long long int gcd(long long int t1,long long int t2){ //求最大公约数
return t2==0? t1:gcd(t2,t1%t2);
}
int jian(long long int a,long long int b){ //判断分母是否为0
long long int t=0,x=0;
if(b==0){
cout<<"Inf";
return 0;
}
long long int k=gcd(abs(a),b);
a=a/k; //化简分数
b=b/k;
t=abs(a)/b; //整数部分
x=abs(a)-t*b; //分子部分
// if(a<0){
// if(t!=0&&x!=0)
// printf("(-%d %d/%d)",t,x,b);
// else if(t!=0&&x==0)
// printf("(-%d)",t);
// else if(t==0&&x!=0)
// printf("(-%d/%d)",x,b );
// else
// printf("0");
// }
if(a<0) {
if((t!=0)&&(x!=0))
printf("(-%lld %lld/%lld)",t,x,b);
if((t!=0)&&(x==0))
printf("(-%lld)",t);
if((t==0)&&(x!=0))
printf("(-%lld/%lld)",x,b);
if((t==0)&&(x==0))
printf("0");
}
if(a>=0){
if(t!=0&&x!=0)
printf("%d %d/%d",t,x,b);
else if(t!=0&&x==0)
printf("%d",t);
else if(t==0&&x!=0)
printf("%d/%d",x,b );
else
printf("0");
}
return 0;
}
int main(){
long long int a1,b1,a2,b2;
scanf("%lld/%lld",&a1,&b1);
scanf("%lld/%lld",&a2,&b2);
jian(a1,b1);cout<<' '<<'+'<<' ';jian(a2,b2);
cout<<' '<<'='<<' ';jian(a1*b2+a2*b1,b1*b2);cout<<endl;
jian(a1,b1);cout<<' '<<'-'<<' ';jian(a2,b2);
cout<<' '<<'='<<' ';jian(a1*b2-a2*b1,b1*b2);cout<<endl;
jian(a1,b1);cout<<' '<<'*'<<' ';jian(a2,b2);
cout<<' '<<'='<<' ';jian(a1*a2,b1*b2);cout<<endl;
jian(a1,b1);cout<<' '<<'/'<<' ';jian(a2,b2);
cout<<' '<<'='<<' ';
if(a2<0)
jian(a1*b2*a2/abs(a2),b1*abs(a2));
else
jian(a1*b2,b1*a2);
cout<<endl;
}