好多题解都说是水题,怎么是水题呐,我感觉这道题挺好嘞
打表,有坑,咱也不知道为啥起名预处理,嘛…有预处理吧
和我的小伙伴商量了一下这个题的坑
直接上图吧,懒得打字了
她做了一下午,我不到半小时,默哀默哀…(哈哈哈哈)
应该是编译器的问题,而且oj还卡,她做出来最后…
内心毫无波澜甚至有点想笑。
啊,好像扯远了,再谈谈坑。
题意就是给你个整数n
然后让你求1 — n 每个数平方的倒数和、
由于计算机有限的,而且保留5位小数。1/k^2 会在某个数收敛,到一定数的时候加不加都不影响结果,之后的数的平方倒数都可以看作0.
这里我作弊了,要么我为什么a的快
其次这个n不知道多大,有可能心狠毒辣的1000位数…嘛,也不可能吧。所以最好要用字符串输入,万一太大造成错误也不好说。
我也参考了大佬的题解,看到了一个超级好用的函数,虽然不知道具体还能干什么,但是可以吧字符串转换成数字…嘛,终于不在苦兮兮的用循环把字符串搞成数字溜!
大佬的代码…我主要就是当日记写着玩玩。所以废话挺多的。
https://blog.youkuaiyun.com/lzh823046544/article/details/52583478
不愿意看大佬的,看我和大佬神似的也行(= w =)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
double a[1000000+20];
char s[10000000];
int main(){
a[0] = 0.0;
double ans = 0;
for(int i = 1; i <= 1000000; ++i){
ans += (1.0/double(double(i)*double(i)));
a[i] = ans;
}
long long n;
while(~scanf("%s",s)){
if(strlen(s) > 7) n = 1000000;
else
sscanf(s,"%lld",&n);
if(n >= 1000000) n = 1000000;
printf("%.5f\n", a[n]);
}
return 0;
}