nyoj111分数加减法

xiaoxiao2021-02-28  13

这道题大慨我做了两个多小时,WA了好几次,最后才找出问题出在哪, 1:我没有考虑到分子可以整除分母,这时应该输出一个整数,而我一直输出分式,这就必错无疑了。 2:刚开始没考虑到要化简,导致错误。 3:不明白它的以EOF结尾是什么意思,事实上有两种方式,一种是c中的 char s[1000]; while(scanf(“%s”,s)!=EOF){

} 还有一种就是c++中的 string a; while(cin>>a){

} 这样的自己会判断是不是文档末尾,很是方便。 3还有一个就是辗转相减法复习一下,总的来说,这道题还是挺不错的

int qiu(int a,int b){ if(a<0)a=-a; while(a!=b){ if(a>b)a=a-b; else b=b-a; } return a; }

描述 编写一个C程序,实现两个分数的加减法

输入 输入包含多行数据 每行数据是一个字符串,格式是”a/boc/d”。 其中a, b, c, d是一个0-9的整数。o是运算符”+”或者”-“。

数据以EOF结束 输入数据保证合法

输出 对于输入数据的每一行输出两个分数的运算结果。 注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数 样例输入

1/8+3/8 1/4-1/2 1/3-1/3

样例输出

1/2 -1/4 0

来源 水题比赛 上传者 hzyqazasdf

#include<iostream> #include<cstring> using namespace std; int qiu(int x,int y){ if(x<0)x=-x; while(x!=y){//辗转相减法 if(x>y)x=x-y; else y=y-x; } return x; } using namespace std; int main(){ string a; while(cin>>a){ int m=qiu(a[2]-'0',a[6]-'0'); m=(a[2]-'0')*(a[6]-'0')/m; int a1,a2; a1=m/(a[2]-'0'); a2=m/(a[6]-'0'); int fenzhi; if(a[3]=='+')//将分子求出来 fenzhi=a1*(a[0]-'0')+a2*(a[4]-'0'); if(a[3]=='-') fenzhi=a1*(a[0]-'0')-a2*(a[4]-'0'); if(fenzhi==0){//判断是否为0 cout<<'0'<<endl; continue; } //判断是否为一个整数 if(fenzhi%m==0)cout<<fenzhi/m<<endl; else{ int simp=qiu(fenzhi,m); fenzhi=fenzhi/simp; m=m/simp; cout<<fenzhi<<'/'<<m<<endl; } } return 0; }
转载请注明原文地址: https://www.6miu.com/read-800221.html

最新回复(0)