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
- PAT 1081. Rational Sum
- 1081. Rational Sum
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081.Rational Sum
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- Android插件技术——(三)加载未安装apk
- poj - 1426-Find The Multiple-BFS
- 通过网络获取图片并缓存
- [TOJ 2663] Concert Hall Scheduling
- 最大子数组和(最大子段和)
- 1081. Rational Sum
- SS2H项目开发历程
- NOIP2012 借教室
- 欢迎使用CSDN-markdown编辑器
- poj-1426 Find The Multiple
- poj 2187 Beauty Contest(凸包)
- 给中国学生的第四封信:大学四年应是这样度过(下)
- 学习书籍
- Linux下更改系统时区及时间