您的位置:首页 > 其它

PAT 1081. Rational Sum (20)(分数加法)(待修改)

2016-09-24 15:39 387 查看

官网

1081. Rational Sum (20)

时间限制

400 ms

内存限制

65536 kB

代码长度限制

16000 B

判题程序

Standard

作者

CHEN, Yue

Given N rational numbers in the form “numerator/denominator”, you are supposed to calculate their sum.

Input Specification:

Each input file contains one test case. Each case starts with a positive integer N (<=100), followed in the next line N rational numbers “a1/b1 a2/b2 …” where all the numerators and denominators are in the range of “long int”. If there is a negative number, then the sign must appear in front of the numerator.

Output Specification:

For each test case, output the sum in the simplest form “integer numerator/denominator” where “integer” is the integer part of the sum, “numerator” < “denominator”, and the numerator and the denominator have no common factor. You must output only the fractional part if the integer part is 0.

Sample Input 1:

5

2/5 4/15 1/30 -2/60 8/3

Sample Output 1:

3 1/3

Sample Input 2:

2

4/3 2/3

Sample Output 2:

2

Sample Input 3:

3

1/3 -1/6 1/8

Sample Output 3:

7/24

题目大意

1.给你一列分数,要你计算他们的和。

2.分子分母的最大范围为long int,负号在数字的前面。

3.分子要小于分母,如果整数部分是0则不用输出整数部分。

未AC代码(找不到那个错的测试点,醉了啊)

#include<iostream>
#include<cstdio>
using namespace std;
long long  sum_fenzi = 0, sum_fenmu = 1;
void add_it(long int t_z,long int t_m)
{
sum_fenzi = sum_fenzi*t_m + sum_fenmu*t_z;
sum_fenmu = sum_fenmu*t_m;
}
int main()
{
int n;
scanf_s("%d", &n);
char a;
for (int i = 0; i < n; i++)
{
long int tem_fenzi, tem_fenmu;
scanf_s("%ld/%ld", &tem_fenzi, &tem_fenmu);
add_it(tem_fenzi, tem_fenmu);
}
if (sum_fenzi==0)
{
cout << 0 << endl;
return 0;
}
bool isP = true;
if (sum_fenzi*sum_fenmu<0)
{
isP = false;
cout << "-";
sum_fenzi = abs(sum_fenzi);
sum_fenmu = abs(sum_fenmu);
}
long long integer = sum_fenzi / sum_fenmu;
if (integer!=0)
{
cout << integer;
sum_fenzi = sum_fenzi%sum_fenmu;
if (sum_fenzi==0)
{
cout << endl;
return 0;
}
else{
cout << " ";
}
}
while (1)
{
bool flag = true;
for (long long i = 2; i <= sum_fenzi; i++)
{
;
if (sum_fenzi%i==0&&sum_fenmu%i==0)
{
sum_fenzi /= i;
sum_fenmu /= i;
flag = false;
}
}
if (flag)
{
break;
}
}
if (!isP)
{
sum_fenmu = -sum_fenmu;
}
cout << sum_fenzi << "/" << sum_fenmu << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: