求大佬拯救下我的代码

P1035 [NOIP2002 普及组] 级数求和

孙博 @ 2020-01-21 21:16:45

我的思路是利用相同的分母比较分子的大小,从而判断大小,分母相同使用最小公倍数。想问下大佬我的这个有什么问题,k=1,k=2,k=3时数据都正确,但是到第四个就不对了,改成long long 类型能到第4个,第五个往后就不对了

#include <iostream>
#include <algorithm>
using namespace std;
int prevlcm=1,prevsum=1,lcm=1,sum=1,sum1=2,sum2=2;
int sn(int n,int k)
{
    int res;
    lcm=(prevlcm*n)/__gcd(prevlcm,n);
    sum1=lcm/prevlcm*sum;
    sum2=lcm/n;
    sum=sum1+sum2;
    res=k*lcm;
    if(sum>res)
        return n;
    else
        {
        prevlcm=lcm;
        prevsum=sum;
        return sn(n + 1, k);
    }
}
int main()
{
    int n=2,k;
    cin>>k;
    n = sn(n,k);
    cout<<n;
}

by WYXkk @ 2020-01-21 21:18:25

@孙博 思路没问题,只是结果化成分数的话分子分母都会特别大(指能到写高精的范围),所以此题应该用实数类型做


by 孙博 @ 2020-01-21 21:27:01

@WYXkk 谢谢大佬指点(っ•̀ω•́)っ✎


|