测试5过不了的一定要看
测试五考察的是为零的情况,这个点卡了我好久,我看了很多也但是博客的文章,只简略提了一下测试2是为0的情况,但是都未具体说明,我测试了很多才发现自己的误区,根据题目和样例得知输出时,结果的整数部分为0,则只输出分数部分。结果的分数部分为0,则只输出整数部分。
但是有一个问题当整数部分和分数部分都为0呢?不输出吗?当然不是,如果都为零则输出一个0,而测试5便是这种情况,我改了无数遍都是只有测试5,或结果不正确,浮点数超限等等。
最终考虑到都为零的情况后就正确了。
代码如下可作参考:
#include<iostream>
using namespace std;
long long yuef(long long a,long long b)
{
if (a == 0)return b;
long long c;
while (b)
{
c = a % b;
a = b;
b = c;
}
return a;
}
int main()
{
int n;
long long suma = 0, sumb = 0, a, b, z = 0;
long long max;
cin >> n;
for (int i = 0; i < n; i++)
{
scanf("%lld/%lld", &a, &b);
if (b==0)continue;
if (suma==0)
{
suma = a;
sumb = b;
}
else
{
suma = suma * b + sumb * a;
sumb = sumb * b;
}
}
if (sumb != 0)
{
z = suma / sumb;
suma = suma - z * sumb;
}
if(suma!=0)
{
max = yuef(suma, sumb);
suma /= max;
sumb /= max;
}
if (z != 0||suma==0)
{
cout << z ;
if (suma != 0)
{
cout <<" ";
}
}
if(suma!=0)
printf("%lld/%lld",suma,sumb);
cout << endl;
return 0;
}