1081. Rational Sum

来源:互联网 发布:房屋三维设计效果软件 编辑:程序博客网 时间:2024/05/16 05:08
#include <cstdio>#include <vector>#include <string>#include <iostream>#include <sstream>using namespace std;#define MAX 20 typedef struct D{int num ;int dem ;int exp ;int sig ;}D ; //求最大公约数int gcd(int a  , int b ){return b==0 ? a : gcd( b , a%b);}//进行约分D getSimple(D d){int temp = gcd(d.num , d.dem ) ;d.num = d.num / temp ;d.dem = d.dem / temp;return d ;}D getSum( D a , D b ){int temp = gcd( a.dem , b.dem ) ;//printf("%d %d || %d %d\n" , a.num , a.dem , b.num , b.dem);//最小公倍数int bcd = a.dem * b.dem / temp ;D ans ;a.num = bcd / a.dem * a.num ;b.num = bcd / b.dem * b.num ;ans.dem = bcd ;if( a.sig == 1 && b.sig == 1){ans.sig = 1 ;ans.num = a.num + b.num ;}else if( a.sig == 1 && b.sig == -1 ){ans.num = a.num - b.num ;if( ans.num < 0 ){ans.num = - ans.num ;ans.sig = -1 ;}else{ans.sig = 1 ;}}else if( a.sig == -1 && b.sig == 1 ){ans.num = b.num - a.num ;if(ans.num < 0 ){ans.num = - ans.num ;ans.sig = -1 ;}else{ans.sig = 1 ;}}else{ans.num = a.num + b.num ;ans.sig = -1 ;}ans = getSimple(ans) ;return ans ;}int main(void){int N ;D value ;value.dem = 1 ;value.num = 0 ;value.sig = 1 ;freopen("input.txt" , "r" , stdin); scanf("%d" , &N);while(N--){string tempS ;int index ;stringstream ss ;D d ;cin>> tempS ;index = tempS.find('/');if( tempS[0] == '-'){ss << tempS.substr( 1 , index - 1 ) ;ss >> d.num ; ss.clear();ss << tempS.substr( index + 1 ,  tempS.length() - index - 1) ;ss >> d.dem ;d.sig = -1 ;}else{ss << tempS.substr( 0 , index ) ;ss >> d.num ;ss.clear() ;ss << tempS.substr( index + 1 , tempS.length() - index - 1 ) ;ss >> d.dem ;d.sig = 1 ;}d  = getSimple( d ) ;value = getSum( value , d) ;}if( value.sig == -1 ) printf("-");if( value.num > value.dem ){value.exp = value.num / value.dem ;value.num = value.num % value.dem ;if( value.num != 0 )printf("%d %d/%d\n" , value.exp , value.num , value.dem);else{printf("%d\n" , value.exp);}}else if( value.num == value.dem ){printf("%d\n" , value.num / value.dem);}else{printf("%d/%d\n" , value.num , value.dem);}return 0 ;}

0 0
原创粉丝点击