c++实现分数操作
此代码包含了分数的操作,包含以下操作:
约分;
求最大公因数和最小公倍数;
分数减法;
假分数转换成带分数。
#include<iostream>
using namespace std;
#define fo(i,begin,end) for(int i=begin;i<=end;i++)
int gcd(int a,int b) {return !b?a:gcd(b,a%b);
}
int lcm(int a,int b) {return a*b/gcd(a,b);
}
void cl(int x) {while(x) {x/=10;cout<<"-";}cout<<"\n";return ;
}
int main() {cout<<"0.退出\n";cout<<"1.约分\n";cout<<"2.求最大公因数和最小公倍数\n";cout<<"3.分数加法\n";cout<<"4.假分数转带分数\n";cout<<"请输入操作编号:\n";int sr;cin>>sr;while(sr!=0) {if(sr==1) {int a,b;cout<<"输入分母:\n";cin>>a;cout<<"输入分子:\n";cin>>b;cout<<"结果:\n";int ans1=b,ans2=a;int ans12=gcd(ans1,ans2);cout<<ans1/ans12<<"\n";cl(max(ans1/ans12,ans2/ans12));cout<<ans2/ans12<<"\n";} else if(sr==2) {int op;cout<<"1.最大公因数\n";cout<<"2.最小公倍数\n";cout<<"请输入操作编号:\n";cin>>op;while(op!=1&&op!=2) {cout<<"输入错误,请重新输入:\n";cin>>op;}if(op==1) {cout<<"输入两个数:\n";int a,b;cin>>a>>b;cout<<"gcd(a,b):"<<gcd(a,b)<<"\n";} else if(op==2) {cout<<"输入两个数:\n";int a,b;cin>>a>>b;cout<<"lcm(a,b):"<<lcm(a,b)<<"\n";}} else if(sr==3) {int a,b,c,d;cout<<"请输入第一个数的分母:\n";cin>>a;cout<<"请输入第一个数的分子:\n";cin>>b;cout<<"请输入第二个数的分母:\n";cin>>c;cout<<"请输入第二个数的分子:\n";cin>>d;cout<<"第一个分数:\n";cout<<b<<"\n";cl(max(a,b));cout<<a<<"\n";cout<<"第二个分数:\n";cout<<d<<"\n";cl(max(c,d));cout<<c<<"\n";cout<<"结果:\n";int ans1=lcm(a,c)/a*b+lcm(a,c)/c*d,ans2=lcm(a,c);int ans12=gcd(ans1,ans2);cout<<ans1/ans12<<"\n";cl(max(ans1/ans12,ans2/ans12));cout<<ans2/ans12<<"\n";} else if(sr==4) {int a,b;cout<<"请输入分母:\n";cin>>a;cout<<"请输入分子:\n";cin>>b;cout<<"结果是:\n";bool f=0;if(b%a==0) {cout<<b/a<<"\n";f=1;}if(!f) {cout<<"整数部分:\n";cout<<b/a;cout<<"\n小数部分:\n";cout<<b%a<<"\n";cl(max(b%a,a));cout<<a<<"\n";}}cout<<"看好了吗?\n";string is;cin>>is;system("cls");cout<<"0.退出\n";cout<<"1.约分\n";cout<<"2.求最大公因数和最小公倍数\n";cout<<"3.分数减法\n";cout<<"4.假分数转带分数\n";cout<<"请输入操作编号:\n";cin>>sr;}cout<<"欢迎再次光临\n";return 0;
}