Docker SCI 父子元素 EasyCVR function split Way.js vue中文网 河南省普通话考试官网 coreldraw学习 安卓虚拟机运行windows 新手学c还是java 如何升级python maven插件 mysql或者条件 Navicat mysql临时表 destoon 网页设计公司 python中sort函数 python开发教程 python语言入门 python匹配字符串 python写入txt文件 java新建文件 java安装与配置 java字符串相等 蓝牙运动耳机排行榜 苹果手机老是自动重启 js添加元素 navicat注册机 mathcad15 ios删除描述文件 qq黑客软件 文字图片制作 字符串分割 刷新当前页面 齐论工具箱 regedit打不开 凯立德地图下载
当前位置: 首页 > 学习教程  > 编程语言

1104 Sum of Number Segments (20分)精度问题,明天研究精度

2021/1/28 23:51:46 文章标签:

①最后两个测试点答案错误,是精度问题 ②long double 对应 %Lf 而不是 %lf // 0.1 0.2 0.3 0.4 // 4 33 222 1111 #include<iostream> using namespace std; int main() {double a[100010],sum0;int n;cin>>n;for(int i0;i<n;i)cin>>a[i];int te…

①最后两个测试点答案错误,是精度问题
②long double 对应 %Lf 而不是 %lf

// 0.1  0.2  0.3  0.4
// 4    3+3  2+2+2  1+1+1+1
#include<iostream>
using namespace std;
int main()
{
    double a[100010],sum=0;
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    int temp=n;
    for(int i=1;i<=n;i++)
    {
        sum+=temp*i*a[i-1];
        temp--;
    }
    printf("%.2lf",sum);
    return 0;
}

修改后:

// 0.1  0.2  0.3  0.4
// 4    3+3  2+2+2  1+1+1+1
#include<iostream>
using namespace std;
int main()
{
    double a[100010];
    long long sum=0;
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    for(int i=1;i<=n;i++)
        sum+=(long long)(a[i-1]*1000)*(n+1-i)*i;
    printf("%.2f",sum/1000.0);
    return 0;
}

换成long double后正确

#include<iostream>
using namespace std;
int main()
{
    long double a[100010],sum=0;
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    int temp=n;
    for(int i=1;i<=n;i++)
        sum+=a[i-1]*(n+1-i)*i;
    printf("%.2Lf",sum);
    return 0;
}

发现问题: sum+=a[i-1]*(n+1-i)*i;如果改成 sum+=(n+1-i)ia[i-1]则最后两个测试点就会报错;


本文链接: http://www.dtmao.cc/news_show_650315.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?