为什么s用float只得60分,用double才满分?

P1035 [NOIP2002 普及组] 级数求和

Aioverst @ 2020-01-18 13:39:32

#include <stdio.h>
#include <stdlib.h>

int main()
{
int n,k;
float s;
scanf("%d",&k);
for (s=0,n=0;s<=k;n++,s=s+1./n)
 ;
printf("%d",n);
return 0;
}

by impuk @ 2020-01-18 13:42:29

精度问题~~


by impuk @ 2020-01-18 13:42:50

你甚至可以用long double


by MatrixCascade @ 2020-01-18 13:43:19

@Aioverst float精度很低的


by impuk @ 2020-01-18 13:45:07

@Aioverst 你如果有问题可以直接私信我~~~

不过这题正解不是这么打的。下面的才是正解。

uses math;
var n:longint;
begin
  read(n);
  writeln(trunc(exp(n-0.5772156649)+0.5));
end.

by Aioverst @ 2020-01-18 13:49:41

float看起来不还是可以容纳十位数嘛。。。

好的,知道啦,谢谢


by Aioverst @ 2020-01-18 13:50:50

@一只爬行者 你这用的是?


by impuk @ 2020-01-18 13:51:38

我是远古的P党人,但是看得懂C++,也会写C++。


by dzk从不打表 @ 2020-01-18 14:26:57

马蜂独特


by biology @ 2020-01-21 12:02:17

#include<bits/stdc++.h>
int main(){
    short k,n=0;
    double Sn=0.0;
    scanf("%hd",&k);
    while(Sn<=k){
        n++;
        Sn=Sn+1.0/n;    
    }
    printf("%hd",n);
    return 0;
}

by biology @ 2020-01-21 12:02:35

大侠们,这段哪里有问题?


|