欢迎光临
我们一直在努力

浙江大学pat刷题,浙大pat答案

计算机中采美国高防vps用浮点数表示所有实数,但这意味着精度丢失。例如无法精确表示“1/3”。
NowCoder最近要处理很多金融问题,这些账目不允许出现精度丢失,因为差之毫厘谬之千里。你能帮他实现一套分数的计算器吗?

输入包含多组数据。
每组数据一行,包含两个分数和一个运算符,中间用空格隔开。
其中分子与分母均为不大于30的正整数。
对应每一组数据,输出两个分数的计算结果。
要求输出最简分数,即分子与分母互质。

输入例子

1/3 2/3 +
1/5 1/4 –
1/2 1/3 *
2/3 4/3 /

输出例子

1/1
-1/20
1/6
1/2

#include<cstdio>int hj(int a,int b){while(a!=b){if(a>b)a=a-b;elseb=b-a;}return a;}//这是一个用来化简的函数,return的a是分子分母的公约数int main(int argc,char const *argv[]){int n1_1 ,n1_2,n2_1,n2_2;int i;char s[100];//因为输入是字符的形式,所以用char数组来存储while(gets(s)){//这是c++的输入n1_1=n1_2=n2_1=n2_2=0;int flag=0;for(i=0;s[i]!=’ ‘&&s[i]!=’\0′;i++){if(flag==0){if(s[i]>=’0’&&s[i]<=’9’)n1_1=(s[i]-‘0′)+n1_1*10;//*10是因为保证多位数也行if(s[i]==’/’)//遇到/,存储的数字位置就会发生改变flag=1;}else{if(s[i]>=’0’&&s[i]<=’9′)n1_2=(s[i]-‘0′)+n1_2*10;}}i++;flag=0;//i++目的是为了跳过’ ‘对后面进行判断for(;s[i]!=’ ‘&&s[i]!=’0′;i++){if(flag==0){if(s[i]>=’0’&&s[i]<=’9’)n2_1=(s[i]-‘0′)+n2_1*10;if(s[i]==’/’)flag=1;}else{if(s[i]>=’0’&&s[i]<=’9′)n2_2=(s[i]-‘0′)+n2_2*10;}}char op=s[++i];int fenzi=0,fenmu=0;//以下是分母分子在+-*/处的变化规律if(op==’+’){fenzi=n1_1*n2_2+n1_2*n2_1;fenmu=n1_2*n2_2;}else if(op==’-‘){fenzi=n1_1*n2_2-n1_2*n2_1;fenmu=n1_2*n2_2;}else if(op==’*’){fenzi=n1_1*n2_1;fenmu=n1_2*n2_2;}else if(op==’/’){fenzi=n1_1*n2_2;fenmu=n1_2*n2_1;}if(fenzi<0){int ys=hj(-fenzi,fenmu);printf(“-%d/%d\n”,-fenzi/ys,fenmu/ys);}else{int ys=hj(fenzi,fenmu);printf(“%d/%d\n”,fenzi/ys,fenmu/ys);}}return 0;}

用C的方法写

#include<stdio.h>#include<stdlib.h>#include<math.h>int hj(int a,int b){if(b%a==0)return a;return hj(b%a,a);}int main(){int n11,n12,n21,n22;int fenzi,fenmu;char op;while(~scanf(“%d/%d %d/%d %c”,&n11,&n12,&n21,&n22,&op)){switch (op){case ‘+’:fenzi=n11*n22+n12*n21;fenmu=n12*n22;break;case ‘-‘:fenzi=n11*n22-n12*n21;fenmu=n12*n22;break;case ‘*’:fenzi=n11*n21;fenmu=n12*n22;break;case ‘/’:fenzi=n11*n22;fenmu=n12*n21;break;}if(fenzi<0){int ys=hj(-fenzi,fenmu);printf(“-%d/%d\n”,-fenzi/ys,fenmu/ys);}else{int ys=hj(fenzi,fenmu);printf(“%d/%d\n”,fenzi/ys,fenmu/ys);}}return 0;} 76751417

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。