Cure

Problem Description
Given an integer  n , we only want to know the sum of  1/k2  where  k  from  1  to  n .
 

Input
There are multiple cases.
For each test case, there is a single line, containing a single positive integer  n
The input file is at most 1M.
 

Output
The required sum, rounded to the fifth digits after the decimal point.
 

Sample Input
  
  
1 2 4 8 15
 

Sample Output
  
  
1.00000 1.25000 1.42361 1.52742 1.58044

#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const double eps=1e-7; long long gcd(long long x,long long y) {     if(x<y) swap(x,y);     while(y)     {         int t=y;         y=x%y;         x=t;     }     return x; } double ans[1000005]; char n[10000000]; int main() {     long long i;     long long fang;     for (i=1;i<=1000000;i++)//存储所有的数字;     {         fang=i*i;         ans[i]=ans[i-1]+1.0/fang;     }     while(~scanf("%s",n))     {         int l=strlen(n);         if(l>6)//             printf("%.5lf\n",ans[1000000]);         else         {             int n1=0;             for(i=0;i<l;i++)//字符转换为数字;                 n1=n1*10+n[i]-'0';             if(n1>1000000)                 printf("%.5lf",ans[1000000]);             else                 printf("%.5lf\n",ans[n1]);         }     } return 0; }

/*#include <cstdio> #include <cstring> using namespace std; double ans[115555]; char a[115555]; int main() {     int i,l,n,flag;     for (i=1; i<=115000; i++)         ans[i]=ans[i-1]+1.0/i/i;     while(~scanf("%s",a))     {         n=flag=0;         l=(int)strlen(a);         for (i=0; i<l; i++)             if (a[i]!='0')             {                 if (l-i>6)                     flag=1;                 else                 {                     for (; i<l; i++)                         n=n*10+(a[i]-'0');                     if (n>115000)                         flag=1;                 }                 break;             }         if (flag)             printf("1.64493\n");         else             printf("%.5f\n",ans[n]);     }     return 0; } #include <iostream> #include <cmath> #include <vector> #include <cstdlib> #include <cstdio> #include <climits> #include <ctime> #include <cstring> #include <queue> #include <stack> #include <list> #include <algorithm> #include <map> #include <set> #define LL long long #define Pr pair<int,int> #define fread(ch) freopen(ch,"r",stdin) #define fwrite(ch) freopen(ch,"w",stdout) using namespace std; const int INF = 0x3f3f3f3f; const int mod = 1e9+7; const double eps = 1e-8; const int maxn = 11234567; char arr[maxn]; int main() {     //fread();     //fwrite();     while(~scanf("%s",arr)){         int len = strlen(arr);         if(len > 6)             puts("1.64493");         else{             int v;             sscanf(arr,"%d",&v);             if(v >= 110292) puts("1.64493");             else if(v >= 52447) puts("1.64492");             else             {                 double ans = 0;                 for(int i=1;i<=v;i++){                     ans += 1.0 / (1.0 * i * i);                 }                 printf("%.5f\n",ans);             }         }     }     return 0; } #include <iostream> #include <algorithm> #include <string.h> #include <stdio.h> #include <queue> #include <set> #include <map> #include <stack> #include <math.h> #define LL long long #define inf 0x3f3f3f3f using namespace std; char str[1000000]; int in(LL &n){     char c;     if(c=getchar(),c==EOF) return 0;     while((c<='0'||c>'9')) c=getchar();     int len = 0;     str[len++] = c;     while(c=getchar(),c>='0'&&c<='9')         str[len++] = c;     str[len] = 0;     if(len > 6)         return 2;     n = 0;     for(int i = 0; i < len; ++i)         n=n*10+(str[i]-'0');     return 1; } int main() {     LL n;     int m;     char ch;     while((m=in(n)),m){         if(m == 2){             printf("1.64493\n");             continue;         }         if(n > 150000){             printf("1.64493\n");             continue;         }         double ans = 0.0;         for(LL i = 1; i <= n; ++i){             ans += 1.0/((double)i*(double)i);         }         printf("%.5f\n",ans);     }     return 0; } #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> using namespace std; double ans[1000010] = {0}; char str[1000010]; int main(){     for(long long i = 1 ; i <= 1000000 ; i++ ) {         ans[i] = 1.0 / (i * i);     }     for(int i = 1 ; i <= 1000000 ; i++) {         ans[i] = ans[i] + ans[i - 1];     }     while(~scanf("%s",str)){         char *p = str;         while((*p) == '0')             p++;         int n;         if(strlen(p) > 7)             n = 1000000;         else             sscanf(p,"%d",&n);         if(n <= 1000000) {             printf("%.5f\n",ans[n]);         } else {             printf("%.5f\n",ans[1000000]);         }     }     return 0; }*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值