求1/n^2+1/(n+1)^2+..1/m^2的和,在大数下结果错误。

时间:2023-01-08 15:50:23
求1/n^2+1/(n+1)^2+..1/m^2的和,在大数下结果错误。这是算法竞赛入门经典的一道课后题,不知怎么改。求助。比如输入
n=65536 m=655360就错了,要求n<m<10^6;

int main(void)
{
    int n,m;
    double sum=0;
    scanf("%d %d",&n,&m);
    for(int i = n; i <= m;i++)
    {
        sum += 1.0/(i * i);
    }
    printf("%.5f",sum);
    return 0;
}

5 个解决方案

#1


既然是大数,你直接用int肯定不够了,int最大才21亿,才10^10左右,10^6的平方显然不行了 

试试

sum += 1.0/((double)i * (double)i);

#2


655360的平方是多少??考虑int的取值范围,是不是有溢出的可能。

用int64吧

#3


将i定义为double类型的

#4


引用 2 楼 coding_hello 的回复:
655360的平方是多少??考虑int的取值范围,是不是有溢出的可能。

用int64吧
唉,都忘了这个类型了,ok了

#5


To coding_hello:晕,分给错了,对不起

#1


既然是大数,你直接用int肯定不够了,int最大才21亿,才10^10左右,10^6的平方显然不行了 

试试

sum += 1.0/((double)i * (double)i);

#2


655360的平方是多少??考虑int的取值范围,是不是有溢出的可能。

用int64吧

#3


将i定义为double类型的

#4


引用 2 楼 coding_hello 的回复:
655360的平方是多少??考虑int的取值范围,是不是有溢出的可能。

用int64吧
唉,都忘了这个类型了,ok了

#5


To coding_hello:晕,分给错了,对不起