问题标题: 代码分享:分数计算器(有C++和Pascal语言两种版本)

1
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追加了内容

我发现代码有一点缺陷,谁发现采纳谁!


0
已采纳
刘英杰
刘英杰
新手天翼
新手天翼

帮你结帖,我没时间找bug

0
0
荣光峰
荣光峰
资深光能
资深光能

谢谢,我去做数学作业了(滑稽)

荣光峰在2020-10-02 12:54:56追加了内容

谢谢,我去做数学作业了(滑稽)

//求采纳

0
张恩泽
张恩泽
高级天翼
高级天翼

三克油,不过数学老师看了,会打shi你的

0
我要回答