1
已解决
沙宸安
高级启示者
高级启示者
本蒟蒻今天给大家分享一个分数计算器的代码(可以自动完成四则运算,分数化简,也可以输入负数)
先看C++语言的:
【输入格式】
[第一个数的分子]/[第一个数的分母]
[运算符号]
[第二个数的分子]/[第二个数的分母]
【输出格式】
[一个整数](如果结果是整数)
[结果的分子]/[结果的分母](如果结果是分数)
#include<iostream>
using namespace std;
int print(int h1,int h2);
int main()
{
int a1,a2,b1,b2,i1,i2,j1,j2,e1,e2,c;
char x,cha;
cin>>a1>>cha>>a2;
cin>>x;
cin>>b1>>cha>>b2;
if(x=='+')
{
i1=a1*b2;
i2=b1*a2;
j1=a2*b2;
j2=a2*b2;
e1=i1+i2;
e2=j1;
}
if(x=='-')
{
i1=a1*b2;
i2=b1*a2;
j1=a2*b2;
j2=a2*b2;
e1=i1-i2;
e2=j1;
}
if(x=='/')
{
c=b2;
b2=b1;
b1=c;
x='*';
}
if(x=='*')
{
e1=a1*b1;
e2=a2*b2;
}
print(e1,e2);
return 0;
}
int print(int h1,int h2)
{
int i,mm1,mm2,biggest=0;
mm1=h1;
mm2=h2;
biggest=h1>h2? h1:h2;
for(i=2;i<biggest;i++)
{
if(mm1%i==0 && mm2%i==0)
{
mm1=mm1/i;
mm2=mm2/i;
i=i-1;
}
}
if(mm1%mm2==0)
{
cout<<mm1/mm2<<endl;
}
else cout<<mm1<<"/"<<mm2<<endl;
}
再来看Pascal语言的:
【输入格式】
[第一个数的分子] [第一个数的分母] //这里特别强调分数线换成空格了
[运算符号]
[第二个数的分子] [第二个数的分母] //(同上)
【输出格式】
[一个整数](如果结果是整数)
[结果的分子]/[结果的分母](如果结果是分数)
Program math;
var
a1,a2,b1,b2,i1,i2,j1,j2,e1,e2,c,mm1,mm2,biggest:longint;
i:integer;
x:char;
begin
readln(a1,a2);
readln(x);
readln(b1,b2);
if(x='+') then
begin
i1:=a1*b2;
i2:=b1*a2;
j1:=a2*b2;
j2:=a2*b2;
e1:=i1+i2;
e2:=j1;
end;
if(x='-') then
begin
i1:=a1*b2;
i2:=b1*a2;
j1:=a2*b2;
j2:=a2*b2;
e1:=i1-i2;
e2:=j1;
end;
if(x='/') then
begin
c:=b2;
b2:=b1;
b1:=c;
x:='*';
end;
if(x='*') then
begin
e1:=a1*b1;
e2:=a2*b2;
end;
mm1:=e1;
mm2:=e2;
if(e1>e2) then biggest:=e1 else biggest:=e2;
i:=1;
while(i<biggest) do
begin
i:=i+1;
if(((mm1 mod i)=0) and ((mm2 mod i)=0)) then
begin
mm1:=mm1 div i;
mm2:=mm2 div i;
i:=i-1;
end;
end;
if(mm1 mod mm2=0) then writeln(mm1 div mm2) else writeln(mm1,'/',mm2);
readln;
end.
这两个程序程序都是同一种思路(因为是C++翻译成Pascal的)除了处理一些数字比较大的分数时会卡,其他我暂时没有发现问题,如果程序有什么问题,或者有更好的改进方法,欢迎指出。
沙宸安在2020-10-02 12:36:27追加了内容
另外,负分数也是可以运算的!
沙宸安在2020-10-02 19:19:17追加了内容
再多嘴一句,为你的学习成绩着想,请不要在做有运算的题目时使用它,本程序仅供娱乐使用!
允许转载,但请注明原作者,谢谢!
沙宸安在2020-10-03 12:09:29追加了内容
我发现代码有一点缺陷,谁发现采纳谁!