64,654
社区成员
发帖
与我相关
我的任务
分享
#include<cstdlib>;
#include<cstdio>;
using namespce std;
就正确了。有人知道这是为什么吗?!求助!//#include<cstdio>
//#include<cstdlib>
#include<stdio.h>
#include<stdlib.h>
#define ll long long
//using namespace std;
ll gcd(ll a, ll b)//最大公约数
{
return a%b==0?b:gcd(b,a%b);
}
int main()
{
ll N,gfm,fzh,zs,fsfz;//公分母 分子和 整数 分数分子
ll fz[100000],fm[100000];
scanf("%lld",&N);
for(int i=0;i<N;i++)
{
scanf("%lld/%lld",&fz[i],&fm[i]);
}
gfm = fm[0];
for(int i=1;i<N;i++)//求公分母
{
gfm = gfm/gcd(fm[i],gfm)*fm[i];
}
fzh = 0;
for(int i=0;i<N;i++)//求分子和
{
fzh += gfm/fm[i]*fz[i];
}
zs = fzh/gfm;//整数部分
fsfz = abs(fzh%gfm);//分数部分的分子
if(fsfz==0)
printf("%lld\n",zs);
else
{
if(zs!=0)
{
printf("%lld ",zs);
}
if(fzh<0&&zs==0)
printf("-");
printf("%lld/%lld\n",fsfz/gcd(fsfz,gfm),gfm/gcd(fsfz,gfm));
}
return 0;
}
namespace std {
int abs ( int n);
long int abs ( long int n);
long long int abs (long long int n);
}
而C语言标准的stdio.h中声明的只是int abs (int n)。
所以,如果不“包含cstdio并指定在std名空间中查找”的话,编译器只会通过stdio.h找到来自C语言的int ::abs (int n),而不是你想要的int long long int std::abs (long long int n)。
如果不使用using namespace std,而明确以std::abs(参数)的形式调用,编译器就不会在你只包含stdio.h的时候悄悄使用int ::abs (int n)。(这也是经典C++编程中不建议使用using namespace std的理由。)