c++---天梯赛---N个数求和
★题目:

★难点:要求只能以有理数和分数去输出结果。
★分析:可以对输入的数据进行通分处理,随后把结果按格式输出。
★代码:
#include<iostream> #include<cmath> #include<cstdio> using namespace std; long gy(long n,long m) //递归求最大公约数 { long temp; if(n<m) temp=n,n=m,m=temp; if(m==0) return n; else return gy(m,n%m); } int main() { long n,i,a,b,c,d,x,y,t; cin>>n; scanf("%ld/%ld",&a,&b); for(int i=1;i<n;i++) { scanf("%ld/%ld",&c,&d); if(a!=0) //对输入的第一个数进行分析 { x=a*d+c*b; y=b*d; t=gy(abs(x),y); a=x/t; b=y/t; } //实现通分操作 else { x=c; y=d; t=gy(abs(x),y); a=x/t; b=y/t; } //对首位数为0的式子实现通分 } if(abs(a)>b&&a%b!=0) { cout<<a/b<<" "<<a%b<<"/"<<b<<endl; //结果大于1且不为整数 } else if(a%b==0) //包含a==0的情况 { cout<<a/b<<endl; //结果为整数 } else cout<<a<<"/"<<b<<endl; //结果为小于1的分数 }
★测试结果:



★ The golden age is before us , not behind us.
------(Mark Twain)
浙公网安备 33010602011771号