HDU - 5879 Cure (收敛了,打表

好多题解都说是水题,怎么是水题呐,我感觉这道题挺好嘞

打表,有坑,咱也不知道为啥起名预处理,嘛…有预处理吧

和我的小伙伴商量了一下这个题的坑

直接上图吧,懒得打字了
在这里插入图片描述
她做了一下午,我不到半小时,默哀默哀…(哈哈哈哈)
应该是编译器的问题,而且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;
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值